sdut 1157 小鼠迷宮

2022-07-15 21:45:11 字數 1856 閱讀 5412

小鼠a與小鼠b身處乙個m×n的迷宮中,如圖所示。每乙個方格表示迷宮中的乙個房間。這m×n個房間中有一些房間是封閉的,不允許任何人進入。在迷宮中任何位置均可沿上,下,左,右4個方向進入未封閉的房間。小鼠a位於迷宮的(p,q)方格中,它必須找出一條通向小鼠b所在的(r,s)方格的路。請幫助小鼠a找出所有通向小鼠b的最短道路。 

請程式設計對於給定的小鼠的迷宮,計算小鼠a通向小鼠b的所有最短道路。

本題有多組輸入資料,你必須處理到eof為止。

每組資料的第一行有3個正整數n,m,k,分別表示迷宮的行數,列數和封閉的房間數。

接下來的k行中,每行2個正整數,表示被封閉的房間所在的行號和列號。

最後的2行,每行也有2個正整數,分別表示小鼠a所處的方格(p,q)和小鼠b所處的方格(r,s)。

對於每組資料,將計算出的小鼠a通向小鼠b的最短路長度和有多少條不同的最短路輸出。

每組資料輸出兩行,第一行是最短路長度;第2行是不同的最短路數。

每組輸出之間沒有空行。

如果小鼠a無法通向小鼠b則輸出「no solution!」。

8 8 3

3 34 5

6 62 1

7 7

11

96bfs廣度遍歷圖表解釋

①起始位置(3.4).終止位置(6,6)

演示)

dfs深度遍歷(此處只往右遍歷)

②演示)

此題用bfs遍歷得出最短路徑是多長,然後由dfs遍歷出所有最短路徑總數

1 #include2 #include3 #include4 #include5

#define n 100

6using

namespace

std;

7int

mark[n][n];

8int

map[n][n];

9struct

node10;

13int

n,m,k;

14int

min_step;

15int

num;

16int

x1,x2,y1,y2;

17int dir[4][2]=;

18int

bfs()

1942

}43 }return -1;44

}45void dfs(int x,int y,int

c_step)

4652

if((x>x2?x-x2:x2-x)+(y>y2?y-y2:y2-y)+c_step>min_step)return;53

inti;

54for(i=0;i<4;i++)

5565}66

}67intmain()

6880 cin>>x1>>y1;

81 cin>>x2>>y2;

82 min_step=-1

;83 min_step=bfs();

84if(min_step==-1

)85 cout<

no solution!

"<

86else

8793 }return0;

94 }

SDUT1157 小鼠迷宮問題 bfs dfs

小鼠a與小鼠b身處乙個m n的迷宮中,如圖所示。每乙個方格表示迷宮中的乙個房間。這m n個房間中有一些房間是封閉的,不允許任何人進入。在迷宮中任何位置均可沿上,下,左,右4個方向進入未封閉的房間。小鼠a位於迷宮的 p,q 方格中,它必須找出一條通向小鼠b所在的 r,s 方格的路。請幫助小鼠a找出所有...

小鼠迷宮問題uva1157

小鼠a與小鼠b身處乙個m n的迷宮中,如圖所示。每乙個方格表示迷宮中的乙個房間。這m n個房間中有一些房間是封閉的,不允許任何人進入。在迷宮中任何位置均可沿上,下,左,右4個方向進入未封閉的房間。小鼠a位於迷宮的 p,q 方格中,它必須找出一條通向小鼠b所在的 r,s 方格的路。請幫助小鼠a找出所有...

小鼠迷宮問題

問題描述 小鼠a與小鼠b身處乙個m n的迷宮中,如圖所示。每乙個方格表示迷宮中的乙個房間。這m n個房間中有一些房間是封閉的,不允許任何人進入。在迷宮中任何位置均可沿上,下,左,右4個方向進入未封閉的房間。小鼠a位於迷宮的 p,q 方格中,它必須找出一條通向小鼠b所在的 r,s 方格的路。請幫助小鼠...