7 1 迷宮尋路 20分 C 實現

2021-10-08 11:44:42 字數 2778 閱讀 2600

7-1 迷宮尋路 (20分)給定乙個m行n列的迷宮圖,其中 "0"表示可通路,「1"表示障礙物,無法通行。在迷宮中只允許在水平或上下四個方向的通路上行走,走過的位置不能重複走。

5行8列的迷宮如下:

0 1 1 1 0 0 0 0

0 0 0 1 0 0 0 0

0 1 0 0 0 1 0 0

0 1 1 1 0 1 1 0

1 0 0 0 0 0 0 0

則從左上角(1,1)至右下角(5,8)的最短路徑為:

1,1–》2,1–》2,2–》2,3–》3,3–》3,4–》3,5–》4,5–》5,5–》5,6–》5,7–》5,8

題目保證每個迷宮最多只有一條最短路徑。

請輸出該條最短路徑,如果不存在任何通路,則輸出"no found」.

輸入格式:

第一行,輸入m和n值,表示迷宮行數和列數。

接著輸入m行數值,其中,0表示通路,1表示障礙物。每列數值用空格符間隔。

接下來可能輸入多組迷宮資料。

當輸入m的值為-1時結束輸入。

輸出格式:

按行順序輸出路徑的每個位置的行數和列數,如 x,y

如果不存在任何路徑,則輸出"no found".

每組迷宮尋路結果用換行符間隔。

輸入樣例:

在這裡給出一組迷宮。例如:

8 8

0 0 1 0 0 0 1 0

0 0 1 0 0 0 1 0

0 0 0 0 1 1 0 0

0 1 1 1 0 0 0 0

0 0 0 1 0 0 0 0

0 1 0 0 0 1 0 0

0 1 1 1 0 1 1 0

1 0 0 0 0 0 0 0

4 4

0 0 1 0

0 0 0 0

0 0 1 1

0 1 0 0

-1 -1

輸出樣例:

在這裡給出相應的輸出。例如:

1,12,1

3,14,1

5,15,2

5,36,3

6,46,5

7,58,5

8,68,7

8,8no found

#

include

#include

using

namespace std;

struct

position

pos[4]

;//四個方向的變數

intmain()

//每個一級指標又可以指向乙個一維陣列,構成了乙個可以動態宣告大小的二維陣列

for(

int i =

1; i <= row; i++)}

for(

int i =

0; i < col+

2; i++

)for

(int i =

0; i < row+

2; i++

)//四個行走方向

pos[0]

.x =

0; pos[0]

.y =1;

// 上

pos[1]

.x =

1; pos[1]

.y =0;

// 右

pos[2]

.x =

0; pos[2]

.y =-1

;// 下

pos[3]

.x =-1

; pos[3]

.y =0;

// 左

//分別是起點,中途經過的點,終點

position start, nbr, end;

start.x =

1; start.y =1;

//起始點

end.x = row; end.y = col;

//出口

/*以下do語句塊中的目的:標記迷宮,我們規定,

對於迷宮的每乙個座標,

用乙個數字對其進行標識,

這個數字為該點到達起始點的距離

*/maze[1]

[1]=

2;/*因為圍牆處的值為1,

為了區分,

設初始點(1,1)值為2,

意味著如果maze[座標x][座標y]的取值4,

那麼該點距離起點的距離為4-2=2;

*///核心方法:廣度優先遍歷。

queuepath;

//用乙個佇列儲存可能可以繼續走的點

do path.

push

(nbr)

;//如果不是終點的話,那麼先把它暫時放進乙個佇列中,因為我們一會可以再以這個點為起點繼續往前走,繼續標識}}

//for迴圈結束了,表示以某乙個點為起點的四個方向你都已經嘗試過了

//即這個點周圍的點你都標識了

if(nbr.x == end.x && nbr.y == end.y)

if(path.

empty()

)else

}while

(true);

//標識結束

if(nbr.x == end.x && nbr.y == end.y)

} start = nbr;

} cout <<

"1,1"

<< endl;

for(

int i =

0; i < length; i++

) cout << endl;}}

return0;

}

PTA7 1 迷宮尋路 20分

7 1 迷宮尋路 20分 給定乙個m行n列的迷宮圖,其中 0 表示可通路,1 表示障礙物,無法通行。在迷宮中只允許在水平或上下四個方向的通路上行走,走過的位置不能重複走。5行8列的迷宮如下 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1...

C 實現A 尋路

網上有關a 演算法的文章已經非常豐富了,各種語言各種思路都有,本來我實在不想再寫一篇,但因為最近工作動盪因此專門抽空又看了一下,然後就想寫個文章防止以後印象模糊,好歹看自己寫的東西可以很快回憶起來。如果是初次接觸a 演算法的朋友可以先看看這篇參考文章,我這邊只是做乙個總結,然後先貼上我之前的筆記吧 ...

C 實現網路尋路

x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如圖1所示的網路。1 2 3 1 是允許的 1 2 1 ...