搜索

来源:互联网 发布:unity3d 录屏插件 编辑:程序博客网 时间:2024/05/16 08:13
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 }
View Code

 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 }
View Code

 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 }
View Code

 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 AA12 {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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
BUG AC CODE
  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 }
TLE BUT RIGHT CODE

 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 }
View Code

 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 }
View Code

 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 }
View Code

 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 }
View Code 直接从Y到M 标号不回头 会MLE 两次bfs 减少储存数据 同时注意必须@地方的步数

 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 }
View Code

 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 AA11 {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 }
View Code

 

0 0
原创粉丝点击