HDU 1728 逃離迷宮

2021-08-08 15:12:57 字數 1326 閱讀 6619

題目大意:中文題

解題思路:畫十字來解題,看圖就很清楚了。如圖,第乙個十字是起點為中心。然後,將除中心的都入佇列,再畫十字,之後的十字轉彎次數為前乙個加一(與之前的十字相同的線條已經記錄過最少轉彎次數)。

bfs ac**:

#include

#include

#include

using

namespace

std;

int t, m, n, vis[105][105], dx[4]=;

int dy[4]=, x1, x2, y1, y2, wonder;

char ch[105][105];

struct node;

queue

qu;void

bfs()

memset(vis, 0, sizeof(vis));

qu.push(temp);

vis[x1-1][y1-1] = 1;

while (!qu.empty())

vis[no.x][no.y] = 1;

qu.push(no);

}no.x += dx[i];

no.y += dy[i];

}} }

printf("no\n");

return ;

}int

main()

return

0;}

dfs大體思路與bfs一致,需要多加乙個剪枝。就是進入下一層是判斷該點是否比記錄的轉彎次數少。剪紙應在進入下一層的判斷,才是優化的正確道路。

dfs ac**:

#include #include using namespace std;

int t, n, m, ex[2], goal[2], k, vis[105][105], flag;

int walk[4][2]=, turn[105][105];

char map[105][105];

void dfs(int center_x, int center_y, int cur) }}

int main()

} scanf("%d%d%d%d%d", &k, &ex[1], &ex[0], &goal[1], &goal[0]);

turn[ex[0]][ex[1]] = 0;

dfs(ex[0], ex[1], 0);

if (flag)

printf("yes\n");

else

printf("no\n");

}return 0;

}

hdu 1728 逃離迷宮

思路 一開始我是往左和往右走,不轉彎,計數不用加,往上和往下走,就轉彎,計數就加一,進行廣搜,搜到最後那個點,比較就可以啦,但是華麗麗的wa啦。所以改一條路搜到底,走不了啦,就一定要轉彎啦。include include include includeusing namespace std stru...

HDU 1728 逃離迷宮

bfs 搞清楚是轉彎而不是步數。所以需要乙個方向一直走下去直到邊界或者牆。還有就是注意題意。給出起點終點的 x,y 位置是交換的。題目是下標1開始。注意。include include include include include include include include include i...

HDU 1728 逃離迷宮

逃離迷宮 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中...