首页 > 代码库 > HDU 1728 逃离迷宫

HDU 1728 逃离迷宫

这题 思路没错..对照了AC的代码,但很奇怪...后来 试出来  是下标问题..真的是这样吗??

 1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 #define maxn 105 5 char maze[maxn][maxn]; 6 int dir[][2] = {{0,-1},{1,0},{0,1},{-1,0}}; 7 int visited[maxn][maxn]; 8 int m,n,k,si,sj,ei,ej; 9 bool ok(int i,int j)10 {11     if(i>= 0 && i <m && j >= 0 && j < n && maze[i][j] != *)12         return true;13     return false;14 }15 struct node16 {17     int x,y;18 };19 void BFS()20 {21     queue<node> q;22     memset(visited,-1,sizeof(visited));23     node temp,next;24     temp.x = si,temp.y = sj;25     q.push(temp);26     while(!q.empty())27     {28         temp = q.front();29         q.pop();30         int times = visited[temp.x][temp.y]+1;  //之前找到temp的方向的点都已被找过,所以接下来的方向与之前找到temp的方向不同,所以拐弯了,需+131         for(int i = 0; i < 4; i++)32         {33             next.x = temp.x+dir[i][0],next.y = temp.y+dir[i][1];34             while(ok(next.x,next.y))35             {36                 if(visited[next.x][next.y] == -1)   //此点从没被找过37                 {38                     if(next.x == ei && next.y == ej && times <= k)39                     {40                         printf("yes\n");41                         return;42                     }43                     q.push(next),visited[next.x][next.y] = times;44                 }45                 next.x += dir[i][0],next.y += dir[i][1];46             }47         }48     }49     printf("no\n");50 }51 int main()52 {53     //freopen("1728.txt","r",stdin);54     int t;55     scanf("%d",&t);56     while(t--)57     {58         int i,j;59         scanf("%d%d",&m,&n);60         for(i = 0; i < m; i++)61             for(j = 0; j < n; j++)62                 cin >> maze[i][j];63             //scanf("%s",maze[i]);64         scanf("%d%d%d%d%d",&k,&sj,&si,&ej,&ei);65         si--,sj--,ei--,ej--;//为了与坐标对应66         BFS();67     }68     return 0;69 }