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

浙公网安备 33010602011771号