搜索
1010
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<cmath> 5 6 using namespace std; 7 8 int n,m,time,ok,dir[][5]={{1,0},{-1,0},{0,1},{0,-1}},dx,dy; 9 char g[200][200]; 10 11 void dfs(int x,int y,int t) 12 { 13 if(t==time) {if(x==dx&&y==dy) ok=1; return;} 14 if(ok) return; 15 int temp=abs(x-dx)+abs(y-dy)-abs(t-time); 16 if(temp>0||temp&1) return; 17 for(int i=0;i<4&&!ok;i++) 18 { 19 int x1,y1; 20 x1=x+dir[i][0]; 21 y1=y+dir[i][1]; 22 if(x1>0&&x1<=n&&y1>0&&y1<=m) 23 { 24 if(g[x1][y1]!='X') 25 { 26 g[x][y]='X'; 27 dfs(x1,y1,t+1); 28 g[x][y]='.'; 29 } 30 } 31 } 32 } 33 34 int main() 35 { 36 while(cin>>n>>m>>time&&(n||m||time)) 37 { 38 int x,y; 39 ok=0; 40 for(int i=1;i<=n;i++) 41 for(int j=1;j<=m;j++) 42 { 43 cin>>g[i][j]; 44 if(g[i][j]=='S') 45 x=i,y=j; 46 if(g[i][j]=='D') 47 dx=i,dy=j; 48 } 49 dfs(x,y,0); 50 if(ok) cout<<"YES"<<endl; 51 else cout<<"NO"<<endl; 52 } 53 }
1241
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 6 int n,m,mark[200][200],dir[][5]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; 7 char g[200][200]; 8 9 void dfs(int x,int y,int cnt) 10 { 11 mark[x][y]=cnt; 12 for(int i=0;i<8;i++) 13 { 14 int x1,y1; 15 x1=x+dir[i][0],y1=y+dir[i][1]; 16 if(x1>=0&&x1<n&&y1>=0&&y1<m) 17 { 18 if(g[x1][y1]=='@'&&!mark[x1][y1]) 19 dfs(x1,y1,cnt); 20 } 21 } 22 } 23 24 int main() 25 { 26 while(cin>>n>>m&&(n||m)) 27 { 28 for(int i=0;i<n;i++) cin>>g[i]; 29 int id=0; 30 memset(mark,0,sizeof(mark)); 31 for(int i=0;i<n;i++) 32 for(int j=0;j<m;j++) 33 { 34 if(!mark[i][j]) 35 if(g[i][j]=='@') 36 dfs(i,j,++id); 37 } 38 cout<<id<<endl; 39 } 40 }
1312
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 #define AA struct ss 7 8 int n,m,cnt,dir[][5]={{0,1},{0,-1},{1,0},{-1,0}}; 9 char g[100][100]; 10 AA{ 11 int a,b; 12 }; 13 14 void bfs(int x,int y) 15 { 16 AA k; 17 k.a=x,k.b=y; 18 queue<AA>que; 19 que.push(k); 20 while(!que.empty()) 21 { 22 k=que.front(); 23 que.pop(); 24 for(int i=0;i<4;i++) 25 { 26 AA p; 27 p.a=k.a+dir[i][0]; 28 p.b=k.b+dir[i][1]; 29 if(p.a>=0&&p.a<n&&p.b>=0&&p.b<m) 30 { 31 if(g[p.a][p.b]=='.') 32 { 33 cnt++; 34 que.push(p); 35 g[p.a][p.b]='#'; 36 } 37 } 38 } 39 } 40 } 41 42 int main() 43 { 44 while(cin>>m>>n&&(n||m)) 45 { 46 int x,y; 47 cnt=1; 48 for(int i=0;i<n;i++) 49 for(int j=0;j<m;j++) 50 { 51 cin>>g[i][j]; 52 if(g[i][j]=='@') x=i,y=j; 53 } 54 bfs(x,y); 55 cout<<cnt<<endl; 56 } 57 }
1242
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 #define AA struct ss 7 8 int n,m,num,dir[][5]={{0,1},{0,-1},{1,0},{-1,0}}; 9 char g[205][205]; 10 11 AA 12 { 13 int x,y,t; 14 friend bool operator < (ss a, ss b) 15 { 16 return a.t>b.t; 17 } 18 }; 19 20 int bfs(int x1,int y1) 21 { 22 priority_queue<ss>que; 23 AA k; 24 g[x1][y1]='#'; 25 k.x=x1;k.y=y1;k.t=0; 26 que.push(k); 27 while(!que.empty()) 28 { 29 k=que.top(); 30 que.pop(); 31 for(int i=0;i<4;i++) 32 { 33 AA p; 34 p.x=k.x+dir[i][0]; 35 p.y=k.y+dir[i][1]; 36 p.t=k.t+1; 37 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m) 38 { 39 if(g[p.x][p.y]!='#') 40 { 41 if(g[p.x][p.y]=='x') p.t++; 42 if(g[p.x][p.y]=='r') return p.t; 43 que.push(p); 44 g[p.x][p.y]='#'; 45 } 46 } 47 } 48 } 49 return -1; 50 } 51 52 int main() 53 { 54 while(cin>>n>>m) 55 { 56 int x1,y1; 57 for(int i=0;i<n;i++) 58 for(int j=0;j<m;j++) 59 { 60 cin>>g[i][j]; 61 if(g[i][j]=='a') 62 x1=i,y1=j; 63 if(g[i][j]=='x') num++; 64 } 65 int f=bfs(x1,y1); 66 if(f!=-1) cout<<f<<endl; 67 else cout<<"Poor ANGEL has to stay in the prison all his life."<<endl; 68 } 69 }
1026
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 #define BB struct sss 9 10 AA 11 { 12 int x,y,t; 13 friend bool operator < (ss a,ss b) 14 { 15 return a.t>b.t; 16 } 17 }; 18 19 BB 20 { 21 char c; 22 int nx,ny; 23 }g[105][105]; 24 25 int n,m,fig[105][105],dir[][5]={{1,0},{-1,0},{0,1},{0,-1}}; 26 27 int bfs() 28 { 29 priority_queue<AA>que; 30 AA k; 31 k.x=n-1,k.y=m-1,k.t=0; 32 if(isdigit(g[n-1][m-1].c)) 33 { 34 fig[n-1][m-1]=g[n-1][m-1].c-'0'; 35 k.t+=fig[n-1][m-1]; 36 } 37 que.push(k); 38 g[k.x][k.y].c='X'; 39 while(!que.empty()) 40 { 41 k=que.top(); 42 que.pop(); 43 if(k.x==0&&k.y==0) return k.t; 44 for(int i=0;i<4;i++) 45 { 46 AA p; 47 p.x=k.x+dir[i][0]; 48 p.y=k.y+dir[i][1]; 49 p.t=k.t+1; 50 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m&&g[p.x][p.y].c!='X') 51 { 52 g[p.x][p.y].nx=k.x; 53 g[p.x][p.y].ny=k.y; 54 if(isdigit(g[p.x][p.y].c)) 55 { 56 fig[p.x][p.y]=g[p.x][p.y].c-'0'; 57 p.t+=fig[p.x][p.y]; 58 } 59 que.push(p); 60 g[p.x][p.y].c='X'; 61 } 62 } 63 } 64 return -1; 65 } 66 67 int main() 68 { 69 while(cin>>n>>m) 70 { 71 for(int i=0;i<n;i++) 72 for(int j=0;j<m;j++) 73 cin>>g[i][j].c; 74 memset(fig,0,sizeof(fig)); 75 int ans=bfs(); 76 if(ans==-1) 77 { 78 cout<<"God please help our poor hero."<<endl; 79 cout<<"FINISH"<<endl; 80 } 81 else { 82 cout<<"It takes "<<ans<<" seconds to reach the target position, let me show you the way."<<endl; 83 int cnt=1,x=0,y=0; 84 if(fig[x][y]) 85 { 86 for(int i=0;i<fig[x][y];i++) printf("%ds:FIGHT AT (%d,%d)\n",cnt++,x,y); 87 } 88 while(cnt<=ans) 89 { 90 int fx=g[x][y].nx;int fy=g[x][y].ny; 91 printf("%ds:(%d,%d)->(%d,%d)\n",cnt++,x,y,fx,fy); 92 if(fig[fx][fy]) 93 { 94 for(int i=0;i<fig[fx][fy];i++) printf("%ds:FIGHT AT (%d,%d)\n",cnt++,fx,fy); 95 } 96 x=fx,y=fy; 97 } 98 cout<<"FINISH"<<endl; 99 } 100 } 101 }
1072
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 #define AA struct ss 6 using namespace std; 7 8 int n,m,g[10][10],cnt,dir[][5]={{1,0},{-1,0},{0,1},{0,-1}}; 9 AA{ 10 char G[10][10]; 11 int x,y,t,time; 12 }; 13 14 int bfs(int r,int c) 15 { 16 queue<AA>que; 17 AA k; 18 memset(k.G,0,sizeof(k.G)); 19 k.x=r,k.y=c; 20 k.t=6;k.time=0; 21 g[k.x][k.y]=0; 22 que.push(k); 23 while(!que.empty()) 24 { 25 k=que.front(); 26 que.pop(); 27 if(k.t==1) continue; 28 for(int i=0;i<4;i++) 29 { 30 AA p; 31 p=k; 32 p.x=k.x+dir[i][0]; 33 p.y=k.y+dir[i][1]; 34 p.t=k.t-1; 35 p.time=k.time+1; 36 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m&&g[p.x][p.y]!=0&&!p.G[p.x][p.y]) 37 { 38 p.G[p.x][p.y]=1; 39 if(g[p.x][p.y]==3) return p.time; 40 if(g[p.x][p.y]==4) {p.t=6;g[p.x][p.y]=0;memset(p.G,0,sizeof(p.G));} 41 que.push(p); 42 } 43 } 44 } 45 return -1; 46 } 47 48 int main() 49 { 50 int T; 51 cin>>T; 52 while(T--) 53 { 54 int x,y; 55 cin>>n>>m; 56 for(int i=0;i<n;i++) 57 for(int j=0;j<m;j++) 58 { 59 cin>>g[i][j]; 60 if(g[i][j]==2) 61 x=i,y=j; 62 } 63 cnt = bfs(x,y); 64 cout<<cnt<<endl; 65 } 66 }
1175
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 #define AA struct ss 7 AA 8 { 9 int x,y,t,w; 10 }; 11 12 int n,m,g[1005][1005],vis[1005][1005],dir[][5]={{0,1},{0,-1},{1,0},{-1,0}}; 13 14 int bfs(int x1,int y1,int x2,int y2) 15 { 16 AA k; 17 k.x=x1;k.y=y1;k.t=0;k.w=-1; 18 queue<AA>que; 19 que.push(k); 20 while(!que.empty()) 21 { 22 k=que.front(); 23 que.pop(); 24 for(int i=0;i<4;i++) 25 { 26 AA p; 27 p.x=k.x+dir[i][0]; 28 p.y=k.y+dir[i][1]; 29 p.t=k.t; 30 p.w=i; 31 if(p.w!=k.w&&k.w!=-1) p.t+=1; 32 if(p.t==3) continue; 33 if(p.x>0&&p.x<=n&&p.y>0&&p.y<=m) 34 { 35 if(!vis[p.x][p.y]) 36 { 37 vis[p.x][p.y]=1; 38 if(p.x==x2&&p.y==y2) {return 1;} 39 if(!g[p.x][p.y]) que.push(p); 40 } 41 } 42 43 } 44 } 45 return -1; 46 } 47 48 int main() 49 { 50 while(cin>>n>>m&&(n||m)) 51 { 52 for(int i=1;i<=n;i++) 53 for(int j=1;j<=m;j++) 54 cin>>g[i][j]; 55 int T; 56 cin>>T; 57 while(T--) 58 { 59 memset(vis,0,sizeof(vis)); 60 int ok,x1,y1,x2,y2; 61 cin>>x1>>y1>>x2>>y2; 62 if(g[x1][y1]==0||g[x2][y2]==0||g[x1][y1]!=g[x2][y2]||(x1==x2&&y1==y2)) 63 { 64 ok=-1; 65 } 66 else { 67 ok=bfs(x1,y1,x2,y2); 68 } 69 if(ok!=-1) cout<<"YES"<<endl; 70 else cout<<"NO"<<endl; 71 } 72 } 73 74 }
1180
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 #define AA struct ss 7 8 int n,m,dir[][5]={{0,1},{0,-1},{1,0},{-1,0}}; 9 char g[25][25]; 10 AA 11 { 12 int x,y,t; 13 friend bool operator < (AA a,AA b) 14 { 15 return a.t>b.t; 16 } 17 }; 18 19 int bfs(int r,int c) 20 { 21 g[r][c]='*'; 22 priority_queue<AA>que; 23 AA k; 24 k.x=r,k.y=c,k.t=0; 25 que.push(k); 26 while(!que.empty()) 27 { 28 k=que.top(); 29 que.pop(); 30 //cout<<k.x<<' '<<k.y<<' '<<k.t<<endl; 31 for(int i=0;i<4;i++) 32 { 33 AA p; 34 p.x=k.x+dir[i][0]; 35 p.y=k.y+dir[i][1]; 36 p.t=k.t+1; 37 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m) 38 { 39 k.t+=2; 40 if(g[p.x][p.y]=='.') 41 { 42 g[p.x][p.y]='*'; 43 que.push(p); 44 } 45 else if(g[p.x][p.y]=='0') 46 { 47 if(k.t%2==0) 48 { 49 if(i==2||i==3) 50 { 51 // g[p.x][p.y]='*'; 52 p.x=p.x+dir[i][0]; 53 p.y=p.y+dir[i][1]; 54 p.t=p.t; 55 if(g[p.x][p.y]=='T') return p.t; 56 else if(g[p.x][p.y]=='.') 57 { 58 g[p.x][p.y]='*'; 59 que.push(p); 60 } 61 } 62 else { 63 k.t-=1; 64 que.push(k); 65 k.t+=1; 66 } 67 } 68 else if(k.t%2) 69 { 70 if(i==0||i==1) 71 { 72 // g[p.x][p.y]='*'; 73 p.x=p.x+dir[i][0]; 74 p.y=p.y+dir[i][1]; 75 p.t=p.t; 76 if(g[p.x][p.y]=='T') return p.t; 77 else if(g[p.x][p.y]=='.') 78 { 79 g[p.x][p.y]='*'; 80 que.push(p); 81 } 82 } 83 else { 84 k.t-=1; 85 que.push(k); 86 k.t+=1; 87 } 88 } 89 } 90 else if(g[p.x][p.y]=='1') 91 { 92 if(k.t%2==0) 93 { 94 if(i==0||i==1) 95 { 96 // g[p.x][p.y]='*'; 97 p.x=p.x+dir[i][0]; 98 p.y=p.y+dir[i][1]; 99 p.t=p.t; 100 if(g[p.x][p.y]=='T') return p.t; 101 else if(g[p.x][p.y]=='.') 102 { 103 g[p.x][p.y]='*'; 104 que.push(p); 105 } 106 } 107 else { 108 k.t-=1; 109 que.push(k); 110 k.t+=1; 111 } 112 } 113 else if(k.t%2) 114 { 115 if(i==2||i==3) 116 { 117 // g[p.x][p.y]='*'; 118 p.x=p.x+dir[i][0]; 119 p.y=p.y+dir[i][1]; 120 p.t=p.t; 121 if(g[p.x][p.y]=='T') return p.t; 122 else if(g[p.x][p.y]=='.') 123 { 124 g[p.x][p.y]='*'; 125 que.push(p); 126 } 127 } 128 else { 129 k.t-=1; 130 que.push(k); 131 k.t+=1; 132 } 133 } 134 } 135 else if(g[p.x][p.y]=='T') return p.t; 136 k.t-=2; 137 } 138 } 139 } 140 return -1; 141 } 142 143 int main() 144 { 145 while(cin>>n>>m) 146 { 147 int x,y; 148 for(int i=0;i<n;i++) 149 for(int j=0;j<m;j++) 150 { 151 cin>>g[i][j]; 152 if(g[i][j]=='S') x=i,y=j; 153 if(g[i][j]=='|') g[i][j]='0'; 154 if(g[i][j]=='-') g[i][j]='1'; 155 } 156 int cnt=bfs(x,y); 157 cout<<cnt<<endl; 158 } 159 }
1240
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 9 AA{ 10 int x,y,z,t; 11 }; 12 13 char g[15][15][15]; 14 int x2,y2,z2,n,dir[][6]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}}; 15 16 bool judge(int x,int y,int z) 17 { 18 if(x>=0&&x<n&&y>=0&&y<n&&z>=0&&z<n) return true; 19 return false; 20 } 21 22 int bfs(int a,int b,int c) 23 { 24 queue<AA>que; 25 AA k; 26 k.x=a,k.y=b,k.z=c,k.t=0; 27 que.push(k); 28 g[k.x][k.y][k.z]='X'; 29 while(!que.empty()) 30 { 31 k=que.front(); 32 que.pop(); 33 if(k.x==z2&&k.y==y2&&k.z==x2) return k.t; 34 // cout<<k.x<<' '<<k.y<<' '<<k.z<<' '<<k.t<<endl; 35 for(int i=0;i<6;i++) 36 { 37 AA p=k; 38 p.x+=dir[i][0]; 39 p.y+=dir[i][1]; 40 p.z+=dir[i][2]; 41 p.t+=1; 42 if(judge(p.x,p.y,p.z)) 43 { 44 if(g[p.x][p.y][p.z]=='O') 45 { 46 que.push(p); 47 g[p.x][p.y][p.z]='X'; 48 } 49 } 50 } 51 } 52 return -1; 53 } 54 55 int main() 56 { 57 string c; 58 while(cin>>c>>n) 59 { 60 for(int i=0;i<n;i++) 61 for(int j=0;j<n;j++) 62 cin>>g[i][j]; 63 int x1,y1,z1; 64 cin>>x1>>y1>>z1>>x2>>y2>>z2; 65 cin>>c; 66 // cout<<g[x2][y2][z2]<<' '<<g[x1][y1][z1]<<endl; 67 int ok=bfs(x1,y1,z1); 68 if(ok==-1) cout<<"NO ROUTE"<<endl; 69 else cout<<n<<' '<<ok<<endl; 70 } 71 }
1253
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 9 AA{ 10 int x,y,z,t; 11 }; 12 13 int g[55][55][55]; 14 int x1,y1,z1,n,dir[][6]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}}; 15 16 bool judge(int a,int b,int c) 17 { 18 if(a>=0&&a<x1&&b>=0&&b<y1&&c>=0&&c<z1) return true; 19 return false; 20 } 21 22 int bfs(int a,int b,int c) 23 { 24 queue<AA>que; 25 AA k; 26 k.x=a,k.y=b,k.z=c,k.t=0; 27 que.push(k); 28 g[k.x][k.y][k.z]=1; 29 while(!que.empty()) 30 { 31 k=que.front(); 32 que.pop(); 33 if(k.x==x1-1&&k.y==y1-1&&k.z==z1-1) return k.t; 34 // cout<<k.x<<' '<<k.y<<' '<<k.z<<' '<<k.t<<endl; 35 for(int i=0;i<6;i++) 36 { 37 AA p=k; 38 p.x+=dir[i][0]; 39 p.y+=dir[i][1]; 40 p.z+=dir[i][2]; 41 p.t+=1; 42 if(judge(p.x,p.y,p.z)) 43 { 44 if(g[p.x][p.y][p.z]==0) 45 { 46 que.push(p); 47 g[p.x][p.y][p.z]=1; 48 } 49 } 50 } 51 } 52 return -1; 53 } 54 55 int main() 56 { 57 int T; 58 scanf("%d",&T); 59 while(T--) 60 { 61 scanf("%d%d%d%d",&x1,&y1,&z1,&n); 62 for(int i=0;i<x1;i++) 63 for(int j=0;j<y1;j++) 64 for(int k=0;k<z1;k++) 65 scanf("%d",&g[i][j][k]); 66 int ok=bfs(0,0,0); 67 if(ok<=n) printf("%d\n",ok); 68 else printf("-1\n"); 69 } 70 }
1372
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 AA{ 9 int x,y,t; 10 }; 11 12 int x1,y1,vis[15][15],dir[][6]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}}; 13 14 int bfs(int a,int b) 15 { 16 queue<AA>que; 17 AA k; 18 k.x=a,k.y=b,k.t=0; 19 que.push(k); 20 while(!que.empty()) 21 { 22 k=que.front(); 23 que.pop(); 24 if(k.x==x1&&k.y==y1) return k.t; 25 for(int i=0;i<8;i++) 26 { 27 AA p=k; 28 p.x+=dir[i][0]; 29 p.y+=dir[i][1]; 30 p.t+=1; 31 32 if(p.x>0&&p.x<('h'-'a'+2)&&p.y>0&&p.y<9&&!vis[p.x][p.y]) 33 { 34 vis[p.x][p.y]=1; 35 que.push(p); 36 } 37 } 38 } 39 40 } 41 42 int main() 43 { 44 char c[5],d[5]; 45 while(cin>>c>>d) 46 { 47 memset(vis,0,sizeof(vis)); 48 int x,y; 49 x=c[0]-'a'+1; 50 y=c[1]-'0'; 51 x1=d[0]-'a'+1; 52 y1=d[1]-'0'; 53 54 int ok=bfs(x,y); 55 printf("To get from %s to %s takes %d knight moves.\n",c,d,ok); 56 } 57 }
1548
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 AA 9 { 10 int x,t; 11 }; 12 int n,a,b,num[205],vis[205]; 13 14 int bfs(int a) 15 { 16 queue<AA>que; 17 AA k; 18 k.x=a;k.t=0; 19 que.push(k); 20 while(!que.empty()) 21 { 22 AA k=que.front(); 23 que.pop(); 24 if(k.x==b) return k.t; 25 AA p; 26 p.x=k.x+num[k.x];p.t=k.t+1; 27 if(p.x>0&&p.x<=n&&!vis[p.x]) 28 { 29 vis[p.x]=1; 30 que.push(p); 31 } 32 p.x=k.x-num[k.x];p.t=k.t+1; 33 if(p.x>0&&p.x<=n&&!vis[p.x]) 34 { 35 vis[p.x]=1; 36 que.push(p); 37 } 38 } 39 return -1; 40 } 41 42 int main() 43 { 44 while(cin>>n&&n) 45 { 46 cin>>a>>b; 47 memset(vis,0,sizeof(vis)); 48 for(int i=1;i<=n;i++) cin>>num[i]; 49 int ok=bfs(a); 50 cout<<ok<<endl; 51 } 52 }
1728
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 9 AA{ 10 int x,y,t,w; 11 }; 12 13 int n,m,vis[105][105],dir[][5]={{0,1},{0,-1},{1,0},{-1,0}}; 14 char g[105][105]; 15 int x1,y1,x2,y2,num; 16 17 int bfs() 18 { 19 AA k; 20 k.x=x1,k.y=y1,k.t=0,k.w=-1; 21 queue<AA>que; 22 que.push(k); 23 while(que.size()) 24 { 25 k=que.front(); 26 que.pop(); 27 if(k.x==x2&&k.y==y2) return 1; 28 for(int i=0;i<4;i++) 29 { 30 AA p=k; 31 p.x+=dir[i][0]; 32 p.y+=dir[i][1]; 33 p.w=i; 34 if(p.w!=k.w&&k.w!=-1) p.t++; 35 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m&&p.t<=num) 36 { 37 if(g[p.x][p.y]=='.'&&(!vis[p.x][p.y]||vis[p.x][p.y]>=p.t)) 38 { 39 vis[p.x][p.y]=p.t; 40 que.push(p); 41 } 42 } 43 } 44 } 45 return -1; 46 } 47 int main() 48 { 49 int T; 50 cin>>T; 51 while(T--) 52 { 53 memset(vis,0,sizeof(vis)); 54 cin>>n>>m; 55 for(int i=0;i<n;i++) 56 cin>>g[i]; 57 cin>>num>>y1>>x1>>y2>>x2; 58 x1-=1;x2-=1;y1-=1;y2-=1; 59 int ok = bfs(); 60 if(ok!=-1) cout<<"yes"<<endl; 61 else cout<<"no"<<endl; 62 } 63 }
1983
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 6 #define mem(x) memset((x),-1,sizeof(x)) 7 #define AA struct ss 8 using namespace std; 9 10 int mark,minn,x1,x2,y1,y2,t,n,m,dir[][6]={{0,1},{0,-1},{1,0},{-1,0}},vis[10][10]; 11 char g[10][10]; 12 13 AA{ 14 int x,y,step,ko; 15 }; 16 17 bool P(int a,int b) 18 { 19 if(a>=0&&a<n&&b>=0&&b<m) return true; 20 return false; 21 } 22 23 int solve() 24 { 25 int sum1=0,sum2=0; 26 mem(vis); 27 for(int i=0;i<4;i++) 28 { 29 int x=x1+dir[i][0],y=y1+dir[i][1]; 30 if(P(x,y)) 31 { 32 if(g[x][y]!='E'&&g[x][y]!='#') 33 { 34 sum1++; 35 } 36 } 37 } 38 for(int i=0;i<4;i++) 39 { 40 int x=x2+dir[i][0],y=y2+dir[i][1]; 41 if(P(x,y)) 42 { 43 if(g[x][y]!='S'&&g[x][y]!='#') 44 { 45 sum2++; 46 } 47 } 48 } 49 return sum1<sum2?sum1:sum2; 50 } 51 52 int bfs() 53 { 54 AA k; 55 k.x=x1,k.y=y1,k.step=0,k.ko=0; 56 mem(vis); 57 queue<AA> que; 58 while(que.size()) que.pop(); 59 que.push(k); 60 61 while(que.size()) 62 { 63 k=que.front(); 64 que.pop(); 65 66 if(k.step>t) continue; 67 if(g[k.x][k.y]=='J') k.ko=1; 68 if(g[k.x][k.y]=='E'&&k.ko) return 1; 69 for(int i=0;i<4;i++) 70 { 71 AA p=k; 72 p.x+=dir[i][0]; 73 p.y+=dir[i][1]; 74 p.step++; 75 if(P(p.x,p.y)) 76 { 77 if(g[p.x][p.y]!='#'&&vis[p.x][p.y]!=p.ko) 78 { 79 vis[p.x][p.y]=p.ko; 80 que.push(p); 81 } 82 } 83 } 84 } 85 return -1; 86 } 87 88 void dfs(int r,int c,int num,int nn) 89 { 90 if(!mark) return; 91 if(num>=minn) return ; 92 if(num==nn) { 93 int cnt=bfs(); 94 if(cnt==-1){ 95 mark=0; 96 minn=num; 97 } 98 return; 99 } 100 for(int i=r;i<n&&mark;i++) 101 { 102 for(int j=c;j<m&&mark;j++) 103 { 104 if(g[i][j]=='.'||g[i][j]=='J') 105 { 106 char c=g[i][j]; 107 g[i][j]='#'; 108 dfs(i,j,num+1,nn); 109 g[i][j]=c; 110 if(!mark) return; 111 } 112 } 113 } 114 } 115 116 int main() 117 { 118 int T; 119 scanf("%d",&T); 120 while(T--) 121 { 122 scanf("%d%d%d",&n,&m,&t); 123 for(int i=0;i<n;i++) 124 { 125 getchar(); 126 for(int j=0;j<m;j++) 127 { 128 scanf("%c",&g[i][j]); 129 if(g[i][j]=='S') x1=i,y1=j; 130 if(g[i][j]=='E') x2=i,y2=j; 131 } 132 } 133 minn=solve(); 134 int ok=bfs(); 135 if(ok!=-1) 136 { 137 mark=1; 138 for(int i=1;i<minn&&mark;i++) 139 dfs(0,0,0,i); 140 printf("%d\n",minn); 141 } 142 else printf("0\n"); 143 } 144 }
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 6 #define mem(x) memset((x),-1,sizeof(x)) 7 #define AA struct ss 8 using namespace std; 9 10 int mark,minn,x1,x2,y1,y2,t,n,m,dir[][6]={{0,1},{0,-1},{1,0},{-1,0}},vis[10][10]; 11 char g[10][10]; 12 13 AA{ 14 int x,y,step,ko; 15 }; 16 17 bool P(int a,int b) 18 { 19 if(a>=0&&a<n&&b>=0&&b<m) return true; 20 return false; 21 } 22 23 int solve() 24 { 25 int sum=0; 26 mem(vis); 27 for(int i=0;i<4;i++) 28 { 29 int x=x1+dir[i][0],y=y1+dir[i][1]; 30 if(P(x,y)) 31 { 32 if(g[x][y]!='E'&&g[x][y]!='#'&&vis[x][y]) 33 { 34 sum++; 35 vis[x][y]=0; 36 } 37 } 38 } 39 for(int i=0;i<4;i++) 40 { 41 int x=x2+dir[i][0],y=y2+dir[i][1]; 42 if(P(x,y)) 43 { 44 if(g[x][y]!='S'&&g[x][y]!='#'&&vis[x][y]) 45 { 46 sum++; 47 vis[x][y]=0; 48 } 49 } 50 } 51 return sum; 52 } 53 54 int bfs() 55 { 56 AA k; 57 k.x=x1,k.y=y1,k.step=0,k.ko=0; 58 mem(vis); 59 queue<AA> que; 60 while(que.size()) que.pop(); 61 que.push(k); 62 63 while(que.size()) 64 { 65 k=que.front(); 66 que.pop(); 67 68 if(k.step>t) continue; 69 if(g[k.x][k.y]=='J') k.ko=1; 70 if(g[k.x][k.y]=='E'&&k.ko) return 1; 71 for(int i=0;i<4;i++) 72 { 73 AA p=k; 74 p.x+=dir[i][0]; 75 p.y+=dir[i][1]; 76 p.step++; 77 if(P(p.x,p.y)) 78 { 79 if(g[p.x][p.y]!='#'&&vis[p.x][p.y]!=p.ko) 80 { 81 vis[p.x][p.y]=p.ko; 82 que.push(p); 83 } 84 } 85 } 86 } 87 return -1; 88 } 89 90 void dfs(int r,int c,int num,int nn) 91 { 92 if(!mark) return; 93 if(num>=minn) return ; 94 if(num==nn) { 95 int cnt=bfs(); 96 if(cnt==-1){ 97 mark=0; 98 minn=num; 99 } 100 return; 101 } 102 for(int i=r;i<n&&mark;i++) 103 { 104 for(int j=c;j<m&&mark;j++) 105 { 106 if(g[i][j]=='.'||g[i][j]=='J') 107 { 108 char c=g[i][j]; 109 g[i][j]='#'; 110 dfs(i,j,num+1,nn); 111 g[i][j]=c; 112 if(!mark) return; 113 } 114 } 115 } 116 } 117 118 int main() 119 { 120 int T; 121 scanf("%d",&T); 122 while(T--) 123 { 124 scanf("%d%d%d",&n,&m,&t); 125 for(int i=0;i<n;i++) 126 { 127 getchar(); 128 for(int j=0;j<m;j++) 129 { 130 scanf("%c",&g[i][j]); 131 if(g[i][j]=='S') x1=i,y1=j; 132 if(g[i][j]=='E') x2=i,y2=j; 133 } 134 } 135 minn=solve(); 136 int ok=bfs(); 137 if(ok!=-1) 138 { 139 mark=1; 140 for(int i=1;i<minn&&mark;i++) 141 dfs(0,0,0,i); 142 printf("%d\n",minn); 143 } 144 else printf("0\n"); 145 } 146 }
2102
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 #define AA struct ss 7 AA 8 { 9 int x,y,ceil,step; 10 }; 11 12 char g[2][11][11]; 13 int x1,y1,n,m,t,dir[][5]={{0,1},{0,-1},{1,0},{-1,0}}; 14 15 bool bfs() 16 { 17 queue<AA>que; 18 while(que.size()) que.pop(); 19 AA k; 20 k.x=0,k.y=0,k.ceil=0,k.step=0; 21 g[k.ceil][k.x][k.y]='*'; 22 que.push(k); 23 while(que.size()) 24 { 25 k=que.front(); 26 que.pop(); 27 // cout<<k.ceil<<' '<<k.x<<' '<<k.y<<endl; 28 for(int i=0;i<4;i++) 29 { 30 AA p=k; 31 p.x+=dir[i][0]; 32 p.y+=dir[i][1]; 33 p.step++; 34 if(p.step>t) break; 35 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m) 36 { 37 if(g[p.ceil][p.x][p.y]!='*') 38 { 39 if(g[p.ceil][p.x][p.y]=='#') 40 { 41 //que.push(p); 42 if(p.ceil==0) p.ceil=1; 43 else p.ceil=0; 44 } 45 if(g[p.ceil][p.x][p.y]=='*') continue; 46 if(g[p.ceil][p.x][p.y]=='#') continue; 47 if(g[p.ceil][p.x][p.y]=='P') return true; 48 g[p.ceil][p.x][p.y]='*'; 49 que.push(p); 50 } 51 } 52 } 53 } 54 return false; 55 } 56 57 int main() 58 { 59 int T; 60 cin>>T; 61 while(T--) 62 { 63 cin>>n>>m>>t; 64 for(int i=0;i<n;i++) 65 cin>>g[0][i]; 66 for(int i=0;i<n;i++) 67 cin>>g[1][i]; 68 69 if(bfs()) cout<<"YES"<<endl; 70 else cout<<"NO"<<endl; 71 } 72 }
2553
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 5 using namespace std; 6 7 int n,vis[5][20],cnt; 8 9 void dfs(int cur) 10 { 11 if(cur==n) {cnt++;return;} 12 for(int i=0;i<n;i++) 13 { 14 if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n]) 15 { 16 vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1; 17 dfs(cur+1); 18 vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0; 19 } 20 } 21 } 22 23 int main() 24 { 25 // int a[]={1,0,0,2,10,4,40,92,352,724}; 26 while(scanf("%d",&n)!=EOF&&n) 27 { 28 cnt=0; 29 memset(vis,0,sizeof(vis)); 30 dfs(0); 31 printf("%d\n",cnt); 32 } 33 }
2563
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 5 using namespace std; 6 7 int g[50][50],dir[][5]={{0,-1},{0,1},{1,0}}; 8 int n,cnt; 9 10 void dfs(int cur,int r,int c) 11 { 12 if(cur==n) {cnt++;return;} 13 for(int i=0;i<3;i++) 14 { 15 int x=r+dir[i][0],y=c+dir[i][1]; 16 if(!g[x][y]) 17 { 18 g[x][y]=1; 19 dfs(cur+1,x,y); 20 g[x][y]=0; 21 } 22 } 23 } 24 25 int main() 26 { 27 int a[]={3,7,17,41,99,239,577,1393,3363,8119,19601,47321,114243,275807,665857,1607521,3880899,9369319,22619537,54608393}; 28 int T; 29 cin>>T; 30 while(T--) 31 { 32 cin>>n; 33 cnt=0; 34 memset(g,0,sizeof(g)); 35 g[25][25]=1; 36 dfs(0,25,25); 37 cout<<" "<<cnt<<endl; 38 } 39 }
2612
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 using namespace std; 6 7 #define AA struct ss 8 AA 9 { 10 int x,y,t; 11 }; 12 int n,m,x1,y1,x2,y2,vis[200][200],dir[][3]={{0,1},{0,-1},{1,0},{-1,0}},step1[200][200],step2[200][200]; 13 char g[200][200]; 14 15 void bfs(int a,int b,int num) 16 { 17 queue<AA>que; 18 while(que.size()) que.pop(); 19 AA k; 20 k.x=a;k.y=b;k.t=0; 21 que.push(k); 22 vis[k.x][k.y]=1; 23 while(que.size()) 24 { 25 k=que.front(); 26 que.pop(); 27 // cout<<k.x<<' '<<k.y<<' '<<k.t<<' '<<g[k.x][k.y]<<endl; 28 for(int i=0;i<4;i++) 29 { 30 AA p=k; 31 p.x+=dir[i][0]; 32 p.y+=dir[i][1]; 33 p.t++; 34 if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m) 35 { 36 if(g[p.x][p.y]!='#'&&!vis[p.x][p.y]) 37 { 38 if(g[p.x][p.y]=='@') 39 { 40 if(num==0&&!step1[p.x][p.y]) step1[p.x][p.y]=p.t; 41 else if(!step2[p.x][p.y]&&num==1) step2[p.x][p.y]=p.t; 42 } 43 vis[p.x][p.y]=1; 44 que.push(p); 45 } 46 } 47 } 48 } 49 } 50 int main() 51 { 52 while(cin>>n>>m) 53 { 54 for(int i=0;i<n;i++) 55 for(int j=0;j<m;j++) 56 { 57 cin>>g[i][j]; 58 if(g[i][j]=='Y') x1=i,y1=j; 59 if(g[i][j]=='M') x2=i,y2=j; 60 } 61 memset(step1,0,sizeof(step1)); 62 memset(step2,0,sizeof(step2)); 63 memset(vis,0,sizeof(vis)); 64 bfs(x1,y1,0); 65 memset(vis,0,sizeof(vis)); 66 bfs(x2,y2,1); 67 int cnt=0x3f3f3f3f; 68 for(int i=0;i<n;i++) 69 for(int j=0;j<m;j++) 70 { 71 if(g[i][j]=='@') 72 { 73 if(step1[i][j]&&step2[i][j]) 74 cnt=min(cnt,step1[i][j]+step2[i][j]); 75 } 76 } 77 cout<<cnt*11<<endl; 78 } 79 }
2614
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 using namespace std; 5 6 int n,g[20][20],cnt,vis[20]; 7 8 void dfs(int r,int num,int t) 9 { 10 if(num>cnt) cnt=num; 11 for(int j=0;j<n;j++) 12 { 13 if(g[r][j]>=t&&!vis[j]) 14 { 15 vis[j]=1; 16 dfs(j,num+1,g[r][j]); 17 vis[j]=0; 18 } 19 } 20 21 } 22 23 int main() 24 { 25 while(cin>>n) 26 { 27 cnt=0; 28 for(int i=0;i<n;i++) 29 for(int j=0;j<n;j++) 30 cin>>g[i][j]; 31 // for(int i=0;i<n;i++) 32 // { 33 memset(vis,0,sizeof(vis)); 34 vis[0]=1; 35 dfs(0,1,0); 36 //} 37 cout<<cnt<<endl; 38 } 39 }
2717
1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 #define AA struct ss 6 using namespace std; 7 8 int n,k,vis[100006]; 9 10 AA 11 { 12 int s,t; 13 }; 14 int bfs() 15 { 16 memset(vis,0,sizeof(vis)); 17 queue<AA> que; 18 AA m; 19 m.s=n;m.t=0; 20 que.push(m); 21 vis[m.s]=1; 22 23 while(que.size()) 24 { 25 m=que.front(); 26 que.pop(); 27 if(m.s==k) return m.t; 28 29 AA p=m; 30 p.s+=1; 31 p.t++; 32 if(p.s>=0&&p.s<=100000&&!vis[p.s]) 33 { 34 vis[p.s]=1; 35 que.push(p); 36 } 37 p=m; 38 p.s-=1; 39 p.t++; 40 if(p.s>=0&&p.s<=100000&&!vis[p.s]) 41 { 42 vis[p.s]=1; 43 que.push(p); 44 } 45 p=m; 46 p.s*=2; 47 p.t++; 48 if(p.s>=0&&p.s<=100000&&!vis[p.s]) 49 { 50 vis[p.s]=1; 51 que.push(p); 52 } 53 } 54 } 55 int main() 56 { 57 while(cin>>n>>k) 58 { 59 int cnt= bfs(); 60 cout<<cnt<<endl; 61 } 62 }