簡單迷宮問題

2021-09-18 03:10:38 字數 1471 閱讀 7560

首先是深搜

又叫回溯法。

#include int n, m, p, q, min = 999999; //p, q為 終點座標,m,n為迷宮行數和列數 

int a[51][51], book[51][51];

void dfs(int x,int y, int step)

return ; // 返回上一步

} int i, tx, ty, next[4][2] = , , , };

for (i = 0; i <= 3; i++)

} return ;

}

1.涉及到資料結構 ->佇列。將可以走到的點加入佇列,依次將佇列中的點進行探索,將探索過的點出隊。

廣搜可以記錄步數,即每乙個座標可以標記乙個步數和父路徑。下面是 過河卒的一張圖

1 1 1 1 1 1 1

1 2 x 1 x 1 2

1 x 0 1 1 x 2

1 1 1 x 1 1 3

1 x 1 1 0 x 3

1 1 x 1 x 0 3

1 2 2 3 3 3 6

x為障礙,其餘點標記了從0.0到每個點需要用的步數。

下面是**:

#inlcude struct node ;

int main(void), book[51][51] = ;

int next[4][2] = , , , };

int head, tail;

int i, j, k, n, m, startx, starty, p, q, tx, ty, flag;

scanf("%d %d", &n, &m);

for (i = 1; i <= n; i++)

} scanf("%d %d %d %d", &startx, &starty, &p, &q);

head = 1;

tail = 1;

que[tail].x = startx;

que[tail].y = starty;

que[tail].f = 0;

que[tail].s = 0;

tail++;

book[startx][starty] = 1;

flag = 0;

while (head < tail)

if (a[tx][ty] == 0 && book[tx][ty] == 0)

if (tx == p && ty == q)

} if (flag == 1)

head++;

} printf("%d",que[tail-1].s);

return 0;

}

詳情請移步啊哈演算法

這是我的學習總結謝謝

迷宮問題求解(1) 簡單迷宮

標頭檔案 include include include include include maze.h define max 100 typedef struct position datatype typedef struct stack stack void stackinit stack s ...

簡單的迷宮問題

給你乙個n m的迷宮,這個迷宮中有以下幾個標識 s代表起點 t代表終點 x代表障礙物 代表空地 現在你們涵哥想知道能不能從起點走到終點不碰到障礙物 只能上下左右進行移動,並且不能移動到已經移動過的點 輸入第一行乙個整數t 1 t 10 接下來有t組測試資料,對於每一組測試資料,第一行輸入2個數n和m...

1089 簡單迷宮問題

pipi定義了乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,請找出從左上角到右下角的最短路線。僅一組測試用例。乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。左上角到右下角的最短路徑,格式如樣例所示。0 1 0 0 ...