PTA7 1 迷宮尋路 20分

2021-10-04 20:23:23 字數 2570 閱讀 9916

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」.

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

輸入樣例:

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

880

0100

0100

0100

0100

0001

1000

1110

0000

0010

0000

1000

1000

1110

1101

0000

0004

4001

0000

0001

1010

0-1-

1

輸出樣例:

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

1,1

2,13

,14,

15,1

5,25

,36,

36,4

6,57

,58,

58,6

8,78

,8no found

程式思路:

(1)從入口元素開始,判斷它上下左右的鄰邊元素是否滿足條件,如果滿足條件就入佇列;

(2)取隊首元素並出佇列。尋找其相鄰未被訪問的元素,將其如佇列並標記元素的前驅節點為隊首元素;

(3)重複步驟(2),直到隊列為空(沒有找到可行路徑)或者找到了終點。最後從終點開始,根據節點的前驅節點找出一條最短的可行路徑。

程式實現:

#include

using

namespace std;

/**

* map是stl的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map**現一次,第二個可能稱為該關鍵字的值)的資料處理能力,

* 由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。

* 這裡說下map內部資料的組織,map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能,

* 所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。在一些特殊情況,比如關鍵字是乙個結構體,涉及到排序就會出現問題,

* 因為它沒有小於號操作,insert等函式在編譯的時候過不去,既然是沒有『<』,那我們自己過載小於操作符應該就可以了。

*/struct site

return

false;}

}p[100];

//將到終點的路線逆向儲存

intmain()

,,,}

;//用二維陣列分別表示下右上左

cin>>m;

while

(m !=-1

)for

(int j =

1; j <= n; j++

) temp.x =1;

temp.y =1;

q.push

(temp)

; a[1]

[1]=

6;//搜尋過的地方值變為6

while

(!q.

empty()

)for

(int i = k-

1; i >=

0; i--

)//輸出路線

cout<.x<<

','<.y

for(

int w =

0; w <

4; w++)}

}if(flag)

cout<<

"no found"

; cout>m;

}return0;

}

7 1 迷宮尋路 20分 C 實現

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...

PTA 7 1 冒泡法排序 20分

將n個整數按從小到大排序的氣泡排序法是這樣工作的 從頭到尾比較相鄰兩個元素,如果前面的元素大於其緊隨的後面元素,則交換它們。通過一遍掃瞄,則最後乙個元素必定是最大的元素。然後用同樣的方法對前n 1個元素進行第二遍掃瞄。依此類推,最後只需處理兩個元素,就完成了對n個數的排序。本題要求對任意給定的k 輸...

PTA 7 1 符號配對 20分 解析

請編寫程式檢查c語言源程式中下列符號是否配對 與 與 與 輸入為乙個c語言源程式。當讀到某一行中只有乙個句點.和乙個回車的時候,標誌著輸入結束。程式中需要檢查配對的符號不超過100個。首先,如果所有符號配對正確,則在第一行中輸出yes,否則輸出no。然後在第二行中指出第乙個不配對的符號 如果缺少左符...