应该算蛮简单的题,不需要什么优化搜索,可是居然想了我很久…………下面贴代码,作纪念。

View Code
  1 /*{
  2 ID:jzy3209981
  3 PROG:maze1
  4 LANG:C++
  5 }*/
  6 #include<stdio.h>
  7 #include<iostream>
  8 #include<string.h>
  9 #include<math.h>
 10 using namespace std;
 11 
 12 int door[4];
 13 int doorstate[100][138][2];
 14 bool state[100][38];
 15 int visit[3800][2];
 16 int maze[210][80];
 17 int paixu(int row,int column)
 18 {
 19     int i,j,change,max=0;
 20     for(i=0;i<row;i++)
 21         for(j=0;j<column;j++)
 22         {
 23             if(doorstate[i][j][0]>doorstate[i][j][1])
 24             {
 25                 change=doorstate[i][j][0];
 26                 doorstate[i][j][0]=doorstate[i][j][1];
 27                 doorstate[i][j][1]=change;
 28             }
 29             if(doorstate[i][j][0]>max)
 30                 max=doorstate[i][j][0];
 31         }
 32     return max;
 33 }
 34 void bfs(int w,int row,int column)
 35 {
 36     int p=0,po=0;
 37     doorstate[door[w*2]/2][door[w*2+1]/2][w]=1;
 38     state[door[w*2]/2][door[w*2+1]/2]=1;
 39     visit[po][0]=door[w*2]/2;
 40     visit[po][1]=door[w*2+1]/2;
 41     po++;
 42     while(p<po)
 43     {
 44         if(visit[p][0]>=1&&maze[visit[p][0]*2][visit[p][1]*2+1]==' '&&state[visit[p][0]-1][visit[p][1]]==0)
 45         {
 46             visit[po][0]=visit[p][0]-1;
 47             visit[po][1]=visit[p][1];
 48             doorstate[visit[po][0]][visit[po][1]][w]=doorstate[visit[p][0]][visit[p][1]][w]+1;    
 49             state[visit[po][0]][visit[po][1]]=1;
 50             po++;
 51         }
 52         if(visit[p][0]<=row-2&&maze[visit[p][0]*2+2][visit[p][1]*2+1]==' '&&state[visit[p][0]+1][visit[p][1]]==0)
 53         {
 54             visit[po][0]=visit[p][0]+1;
 55             visit[po][1]=visit[p][1];
 56             doorstate[visit[po][0]][visit[po][1]][w]=doorstate[visit[p][0]][visit[p][1]][w]+1;
 57             state[visit[po][0]][visit[po][1]]=1;
 58             po++;
 59         }
 60         if(visit[p][1]>=1&&maze[visit[p][0]*2+1][visit[p][1]*2]==' '&&state[visit[p][0]][visit[p][1]-1]==0)
 61         {
 62             visit[po][0]=visit[p][0];
 63             visit[po][1]=visit[p][1]-1;
 64             doorstate[visit[po][0]][visit[po][1]][w]=doorstate[visit[p][0]][visit[p][1]][w]+1;
 65             state[visit[po][0]][visit[po][1]]=1;
 66             po++;
 67         }
 68         if(visit[p][1]<=column-2&&maze[visit[p][0]*2+1][visit[p][1]*2+2]==' '&&state[visit[p][0]][visit[p][1]+1]==0)
 69         {
 70             visit[po][0]=visit[p][0];
 71             visit[po][1]=visit[p][1]+1;
 72             doorstate[visit[po][0]][visit[po][1]][w]=doorstate[visit[p][0]][visit[p][1]][w]+1;
 73             state[visit[po][0]][visit[po][1]]=1;
 74             po++;
 75         }
 76         p++;
 77     }
 78 }
 79 int main()
 80 {
 81     freopen ("maze1.in","r",stdin);
 82     freopen ("maze1.out","w",stdout);
 83     int row,column,i,j,doorp=0,result;
 84     scanf("%d%d",&column,&row);
 85     getchar();
 86     for(i=0;i<row*2+1;i++)
 87     {
 88         for(j=0;j<column*2+1;j++)
 89         {            
 90             maze[i][j]=getchar();
 91             if(i==0&&maze[i][j]==' ')
 92             {
 93                 door[doorp]=i+1;
 94                 door[doorp+1]=j;
 95                 doorp+=2;
 96             }
 97             else if(i==2*row&&maze[i][j]==' ')
 98             {
 99                 door[doorp]=i-1;
100                 door[doorp+1]=j;
101                 doorp+=2;
102             }
103             else if(j==0&&maze[i][j]==' ')
104             {
105                 door[doorp]=i;
106                 door[doorp+1]=j+1;
107                 doorp+=2;
108             }
109             else if(j==2*column&&maze[i][j]==' ')
110             {
111                 door[doorp]=i;
112                 door[doorp+1]=j-1;
113                 doorp+=2;
114             }
115         }
116         getchar();
117     }
118     bfs(0,row,column);
119     memset(visit,0,7600*sizeof(int));
120     memset(state,0,3800*sizeof(bool));
121     bfs(1,row,column);
122     result=paixu(row,column);
123     printf("%d\n",result);
124     return 0;
125 }

 

posted on 2012-08-03 20:35  醉春雨  阅读(161)  评论(0)    收藏  举报