码迷,mamicode.com
首页 > 其他好文 > 详细

dfs/poj3083 Children of the Candy Corn

时间:2014-12-02 23:52:09      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<queue>
  4 
  5 using namespace std;
  6 typedef pair<int,int>P;
  7 const int dx[4]={1,0,-1,0};
  8 const int dy[4]={0,1,0,-1};
  9 const int INF=1e9;
 10 int sx,sy,ex,ey,n,m;
 11 char a[50][50];
 12 int d[50][50];
 13 
 14 bool pd(int x,int y)
 15 {
 16     if (x>=0 && x<n && y>=0 && y<m && a[x][y]!=#) return true;
 17     return false;
 18 }
 19 
 20 int dfs(int x,int y,int xx,int yy,char d)
 21 {
 22     if (x==xx && y==yy) return 1;
 23     if (d==U)
 24     {
 25         if (pd(x-1,y)) return dfs(x-1,y,xx,yy,L)+1;
 26         else if (pd(x,y-1)) return dfs(x,y-1,xx,yy,U)+1;
 27         else if (pd(x+1,y)) return dfs(x+1,y,xx,yy,R)+1;
 28         else if (pd(x,y+1)) return dfs(x,y+1,xx,yy,D)+1;
 29     }
 30     else if (d==L)
 31     {
 32         if (pd(x,y+1)) return dfs(x,y+1,xx,yy,D)+1;
 33         else if (pd(x-1,y)) return dfs(x-1,y,xx,yy,L)+1;
 34         else if (pd(x,y-1)) return dfs(x,y-1,xx,yy,U)+1;
 35         else if (pd(x+1,y)) return dfs(x+1,y,xx,yy,R)+1;
 36     }
 37     else if (d==D)
 38     {
 39         if (pd(x+1,y)) return dfs(x+1,y,xx,yy,R)+1;
 40         else if (pd(x,y+1)) return dfs(x,y+1,xx,yy,D)+1;
 41         else if (pd(x-1,y)) return dfs(x-1,y,xx,yy,L)+1;
 42         else if (pd(x,y-1)) return dfs(x,y-1,xx,yy,U)+1;
 43     }
 44     else if (d==R)
 45     {
 46         if (pd(x,y-1)) return dfs(x,y-1,xx,yy,U)+1;
 47         else if (pd(x+1,y)) return dfs(x+1,y,xx,yy,R)+1;
 48         else if (pd(x,y+1)) return dfs(x,y+1,xx,yy,D)+1;
 49         else if (pd(x-1,y)) return dfs(x-1,y,xx,yy,L)+1;
 50     }
 51 }
 52 
 53 int bfs(int sx,int sy,int ex,int ey)
 54 {
 55     int v[50][50];
 56     for (int i=0;i<50;i++)
 57         for (int j=0;j<50;j++) d[i][j]=INF;
 58 
 59     queue<P> que;
 60     que.push(P(sx,sy));
 61     d[sx][sy]=1;
 62     while (que.size())
 63     {
 64         P p=que.front();
 65         que.pop();
 66         if (p.first==ex && p.second==ey) break;
 67         for (int i=0;i<4;i++)
 68         {
 69             int nx=p.first+dx[i];
 70             int ny=p.second+dy[i];
 71             if (pd(nx,ny) && d[nx][ny]==INF)
 72             {
 73                 que.push(P(nx,ny));
 74                 d[nx][ny]=d[p.first][p.second]+1;
 75             }
 76        }
 77     }
 78     return d[ex][ey];
 79 }
 80 int main()
 81 {
 82     int tot;
 83     scanf("%d",&tot);
 84     for(int t=1;t<=tot;t++)
 85     {
 86         scanf("%d%d",&m,&n);
 87         for (int i=0;i<n;i++)
 88         {
 89             scanf("%s",a[i]);
 90             for(int j=0;j<m;j++)
 91             {
 92                 if (a[i][j]==S)
 93                 {
 94                     sx=i;
 95                     sy=j;
 96                 }else
 97                 if (a[i][j]==E)
 98                 {
 99                     ex=i;
100                     ey=j;
101                 }
102             }
103         }
104       //  printf("%d %d\n",ex,ey);
105         int ans2=dfs(sx,sy,ex,ey,U);
106         int ans1=dfs(ex,ey,sx,sy,U);
107         int ans3=bfs(sx,sy,ex,ey);
108         printf("%d %d %d\n",ans1,ans2,ans3);
109     }
110     return 0;
111 }

 

dfs/poj3083 Children of the Candy Corn

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/NicoleLam/p/4138812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!