走出迷宮(C程式設計高階第9周)

2021-07-08 12:28:49 字數 1931 閱讀 3534

問題描述

當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。

假設你已經得到了乙個n*m的迷宮的圖紙,請你找出從起點到出口的最短路。

輸入

第一行是兩個整數n和m(1 <= n,m <= 100),表示迷宮的行數和列數。

接下來n行,每行乙個長為m的字串,表示整個迷宮的布局。字元』.』表示空地,』#』表示牆,』s』表示起點,』t』表示出口。

輸出

輸出從起點到出口最少需要走的步數。(你不能起出迷宮外)

樣例輸入

3

3s#t

.#....

樣例輸出

6
提示

此題預設是至少有一條路線可以走出的

原始碼1是抄別人的,沒搞懂,好像會把所有的路都遍歷一遍。寫的很高深,測試通過

原始碼2是自己寫的,測試不通過,但一直找不出問題所在,日後再找。

原始碼

原始碼1:

#include 

#include

using

namespace

std;

int m,n;//n行m列

char

map[101][101];//地圖矩陣

int already[101][101];//已走地圖記憶

int min_count=0;

void cross(int u, int v, int i, int j)

t++;

if (v < m - 1 && map[u][v+1] != '#' && already[u][v+1]>t)//在迷宮內、右側非牆且此點沒有走過

if (u > 0 && map[u-1][v] != '#' && already[u-1][v]>t)

if (v > 0 && map[u][v-1] != '#' && already[u][v-1]>t)

if (u < n - 1 && map[u+1][v] != '#' && already[u+1][v]>t)

}int main()

if (map[i][j]=='t') }}

memset(already,1,sizeof(already));//按位元組為單位賦值:16843309

already[startx][starty]=0;

cross(startx,starty,endx,endy);

cout

0;}

原始碼2:

#include 

using

namespace

std;

int row, column;

char

map[101][101] = ;

int f(int x, int y)//起點座標x,y

if (map[x][y] == '#')//此點不可作為起點

else

if (map[x][y] == 't')//起點即為終點

else}}

int min;

for (int i = 0; i < 4; i++)//找出最小值

}

}return -1;

}int main()

}}

int minstep = f(x, y);

cout

<< minstep << endl;

return

0;}

第9周程式設計作業

敲 是真的累,這章要打好多字 題目內容 設計乙個person類,包含name age 屬性以及對這些屬性操作的方法。實現並測試這個類。根據類的封裝性要求,把name age 宣告為私有的資料成員,宣告公有的成員函式register showme 來訪問這些屬性,在register 函式中對資料成員進...

C 高階程式設計(第9版) 第06章 陣列

好久沒發東西了 一停下來就會變懶。雖然沒完成,也就是它吧 以下正文 本章要點 1 簡單陣列 2 多維陣列 3 鋸齒陣列 4 array類 5 作為引數的陣列 6 列舉 7 元組 8 結構比較 同一型別和不同型別的多個物件 如果需要使用同一型別的多個物件,就可以使用集合 參見第10章 和陣列。c 用特...

票統計(C程式設計高階第2周)

問題描述 有乙個小型的報賬系統,它有如下功能 1 統計每個人所報發票的總錢數 2 統計每類發票的總錢數 將此系統簡化為如下 假設發票類別共有a b c三種 一共有三個人,id分別為1 2 3。輸入 系統輸入包含三行,每行第乙個數為人員id 整型,1或2或3 第二個數為發票總張數 張數不超過100 之...