zoukankan      html  css  js  c++  java
  • 搜索

    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 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 }
    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)
    ",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)
    ",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)
    ",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
    ",ok);
    68         else printf("-1
    ");
    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.
    ",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
    ",minn);
    141         }
    142         else printf("0
    ");
    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
    ",minn);
    143         }
    144         else printf("0
    ");
    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
    ",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 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 }
    View Code
  • 相关阅读:
    shell 编程 如何实现 比较两个整数的大小
    从Mysql某一表中随机读取n条数据的SQL查询语句
    AS3中UTF8、GB2312、BIG5、GBK编码转换类
    Google Map API V3 离线版
    linux下解压命令大全
    PHP 5.3无法安装Memcached解决方案
    根据淘宝商品 num_iid 批量生成淘宝客链接的 PHP 函数
    Linux curl使用简单介绍
    TCP/IP UDP用户数据报协议 运输层
    TCP/IP 应用层
  • 原文地址:https://www.cnblogs.com/wsaaaaa/p/4298585.html
Copyright © 2011-2022 走看看