啊哈演算法 水管工遊戲

2022-04-09 07:53:10 字數 2341 閱讀 7604

遊戲大致規則是:一塊矩形土地被分成n*m的單位正方形,現在這塊土地已經埋設了一些水管。

水管將從矩形土地的左上角左部邊緣,延伸到右下角右部邊緣。

水管只有兩種:彎管和直管

彎管有四種狀態

直管有兩種狀態

0,1,2,3,4,5,6分別表示:0表示樹木,1,2,3,4表示彎管四種狀態。5,6表示直管兩種狀態。

程式需要判斷進水口:進水口在左邊用1表示;在上邊用2表示;在右邊用3表示;在下邊用4表示。

/*

水管工:鋪設管道

*/#include

int a[51][51];//

假設土地大小不超過50*50

int book[51][51

];int n, m, flag = 0

;void dfs(int x, int y, int front)//

front:定義四個方向左上右下分別為1234

//判斷是否越界

if (x<1 || x>n || y<1 || y>m)

return

;

//判斷這個管道是否在路徑中已經使用過

if (book[x][y] == 1

)

return

; book[x][y] = 1;//

標記使用當前這個管道

//當前管道是直管情況

if (a[x][y] >= 5 && a[x][y] <= 6

)

if (front == 2)//

水從上邊進

if (front == 3)//

水從右邊進

if (front == 4)//

水從下邊進

}//當前水管是彎管的情況

if (a[x][y] >= 1 && a[x][y] <= 4

)

if (front == 2)//

水從上邊進

if (front == 3)//

水從右邊進

if (front == 4)//

水從下邊進

}book[x][y] = 0

;

return;}

intmain()

上面**並沒有解決最初的要求「輸出路徑」。只需在**中加入乙個棧,就可以輸出路徑。**如下:

/*

水管工:鋪設管道,求輸出路徑

*/#include

int a[51][51];//

假設土地大小不超過50*50

int book[51][51

];int n, m, flag = 0;//

加入乙個棧

struct

note

s[100

];int top = 0

;void dfs(int x, int y, int front)//

front:定義四個方向左上右下分別為1234

//判斷是否越界

if (x<1 || x>n || y<1 || y>m)

return

;

//判斷這個管道是否在路徑中已經使用過

if (book[x][y] == 1

)

return

; book[x][y] = 1;//

標記使用當前這個管道

//將當前嘗試的座標入棧

top++;

s[top].x =x;

s[top].y =y;

//當前管道是直管情況

if (a[x][y] >= 5 && a[x][y] <= 6

)

if (front == 2)//

水從上邊進

if (front == 3)//

水從右邊進

if (front == 4)//

水從下邊進

}//當前水管是彎管的情況

if (a[x][y] >= 1 && a[x][y] <= 4

)

if (front == 2)//

水從上邊進

if (front == 3)//

水從右邊進

if (front == 4)//

水從下邊進

}book[x][y] = 0;//

取消標記

top--;//

將當前嘗試的座標出棧

水管工遊戲 啊哈演算法

一塊矩形土地被分隔n m的單位正方形,現在這塊土地上已經埋設一些水管,水管將從座標 1,1 的矩形土地的左上角左部邊緣,延伸到座標 n,m 的矩形土地的右下角邊緣。水管只有兩種。一種彎的,一種直的。每種管道將佔據乙個單位正方形土地。你現在可以旋轉這些管道,使得其構成乙個管道系統。標有樹木的方格表示這...

水管工遊戲

1 題目 水管工遊戲是指如下圖中的矩陣中,一共有兩種管道,乙個是直的,乙個是彎的,所有管道都可以自由旋轉,最終就是要連通入水口可出水口。其中的樹為障礙物。2 演算法思路 本題使用的是深度優先搜尋演算法,先標識入水口方向,在每次探索新管道的時候上根據入水口方向進行擴充套件,然後根據管道的型別來判斷下乙...

4 6水管工遊戲

include includeusing namespace std int a 51 51 假設徒弟的大小不超過50 50 int book 51 51 n,m,flag 0 struct notes 100 int top 0 void dfs int x,int y,int front 判斷這...