hdu1072 Nightmare

    技术2025-02-14  12

    下午写了三道广搜,大同小异,一道涉及位压缩,表示不懂所以WA了,唉,三个都没能秒过,细微的错误太多T_T。。。悲剧,还是算法实现和写代码能力太差,失败!!以后要再加强锻炼了,昨天和Y大牛聊天到很晚,对他的言辞深有感触,特此谢谢Y大牛的教诲^_^。附此题AC代码如下:

    # include<iostream># include<queue>using namespace std;struct Node{       int x, y;       int time;       int rest;     };int n, m;int Go[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};int map[11][11];int visited[11][11];int sx, sy, ex, ey;int check(int x, int y){    if (x >=1 && x <= n && y >= 1 && y <= m && map[x][y])return 1;    return 0;}int check1;void Bfs(){     queue<Node> Que;     //memset(visited, 0, sizeof(visited));     visited[sx][sy] = 6;     Node temp;     temp.x = sx;     temp.y = sy;     temp.rest = 6;     temp.time = 0;     Que.push(temp);     while (!Que.empty()){           Node pre = Que.front();           Que.pop();           if (pre.x == ex && pre.y == ey && pre.rest > 0){                     //cout <<"rest:"<< pre.rest<<endl;              check1 = pre.time;              return ;                      }           for (int i = 0; i < 4; i ++){               Node next;               next.x = pre.x + Go[i][0];               next.y = pre.y + Go[i][1];               next.rest = pre.rest;               next.time = pre.time;               if (check(next.x, next.y) && map[next.x][next.y]!= 0){                  next.rest --;                  next.time ++;                  if (next.rest <= 0)continue;                  if (map[next.x][next.y] == 4){                     next.rest = 6;                               }                  if (next.rest > 0 && visited[next.x][next.y] < next.rest){                     visited[next.x][next.y] = next.rest;                     Que.push(next);                                             }               }           }                   }     return ;}int main(){    int t;     scanf("%d", &t);    while (t--){          scanf("%d %d", &n, &m);    for (int i = 1; i <= n; i ++){        for (int j = 1; j <= m; j ++){            scanf("%d",&map[i][j]);            if (map[i][j] == 2){sx = i; sy = j;}            if (map[i][j] == 3){ex = i; ey = j;}              visited[i][j] = 0;          }    }        check1 = -1;        Bfs();        printf("%d/n", check1);    }    return 0;    }

     

    最新回复(0)