Untitled
unknown
plain_text
a year ago
2.0 kB
6
Indexable
#include<iostream> using namespace std; int mover[4]={-1,0,1,0}; int movec[4]={0,1,0,-1}; struct point{ int x,y; }; class queue{ int rear,front; point mang[400]; public: queue(){ rear=front=-1; } void push(int i, int j){ rear++; mang[rear].x=i; mang[rear].y=j; } point pop(){ front++; return mang[front]; } bool isempty(){ return (rear==front); } void reset(){ rear=front=-1; } }; queue q; int t,n,g,a,b,index,ans,flag; point gold[4]; int map[20][20]; int visit[20][20]; int res[20][20]; void resetvisit(){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++) visit[i][j]=-1; } } void resetres(){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) res[i][j]=100000; } void bfs(int x, int y){ resetvisit(); q.reset(); q.push(x,y); visit[x][y]=0; while(!q.isempty()){ point u=q.pop(); for(int h=0;h<4;h++){ int nx=u.x+mover[h]; int ny=u.y+movec[h]; if(nx>=0 && nx<n && ny>=0 && ny<n && visit[nx][ny]==-1 && map[nx][ny]!=0){ visit[nx][ny]=visit[u.x][u.y]+1; q.push(nx,ny); } } } } int main(){ freopen("input.txt","r",stdin); cin >> t; for(int tc=1;tc<=t;tc++){ cin >> n >> g; for(int i=0;i<g;i++){ cin >> a >> b; gold[i].x=a-1; gold[i].y=b-1; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++) cin >> map[i][j]; } for(int i=0;i<g;i++){ map[gold[i].x][gold[i].y]=2; } flag=0; resetres(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(map[i][j]!=0 && map[i][j]!=2){ bfs(i,j); int max=0; for(int i=0;i<g;i++){ if(visit[gold[i].x][gold[i].y]>max) max=visit[gold[i].x][gold[i].y]; if(visit[gold[i].x][gold[i].y]==-1) flag=1; } res[i][j]=max; } if(flag==1) break; } if(flag==1) break; } if(flag==1) cout << "-1" << endl; else{ ans=10000; for(int i=0;i<n;i++){ for(int j=0;j<n;j++) { if(res[i][j]<ans) ans=res[i][j]; } } cout << ans << endl; } } return 0; }
Editor is loading...
Leave a Comment