路障(廣度優先搜尋)

2021-07-23 03:44:17 字數 1896 閱讀 7552

題目描述:

b君站在乙個n*n的棋盤上。最開始,b君站在(1,1)這個點,他要走到(n,n)這個點。

b君每秒可以向上下左右的某個方向移動一格,但是很不妙,c君打算阻止b君的計畫。

每秒結束的時刻,c君會在(x,y)上擺乙個路障。b君不能走在路障上。

b君拿到了c君準備在哪些點放置路障。所以現在你需要判斷,b君能否成功走到(n,n)。

保證不會走到某處,然後被乙個路障砸死。

輸入輸出格式

輸入格式:

首先是乙個正整數t,表示資料組數。

對於每一組資料:

第一行,乙個正整數n。

接下來2n-2行,每行兩個正整數x和y,意義是在那一秒結束後,(x,y)將被擺上路障。

輸出格式:

對於每一組資料,輸出yes或no,回答b君能否走到(n,n)。

輸入輸出樣例

輸入樣例#1:

2 2

1 1

2 2

5 3 3

3 2

3 1

1 2

1 3

1 4

1 5

2 2

輸出樣例#1:

yes

yes

說明樣例解釋:

以下0表示能走,x表示不能走,b表示b君現在的位置。從左往右表示時間。

case 1:

0 0 |0 0 |0 b (已經走到了)

b 0 |x b |x 0

case 2:

0 0 0 0 0 |0 0 0 0 0 |0 0 0 0 0 |0 0 0 0 0

0 0 0 0 0 |0 0 0 0 0 |0 0 0 0 0 |0 0 0 0 0

0 0 0 0 0 |0 0 x 0 0 |0 0 x 0 0 |0 0 x 0 0

0 0 0 0 0 |0 0 0 0 0 |0 0 x 0 0 |0 0 x 0 0

b 0 0 0 0 |0 b 0 0 0 |0 0 b 0 0 |0 0 x b 0 ……(b君可以走到終點)

資料規模:

防止騙分,資料保證全部手造。

對於20%的資料,有n<=3。

對於60%的資料,有n<=500。

對於100%的資料,有n<=1000。

對於100%的資料,有t<=10。

#include

#include

using

namespace

std;

const

int maxn=1010;

int t,n,a[maxn][maxn];

bool flag[maxn][maxn];

struct node

;void search()

if(tmp.x+1

<=n&&!flag[tmp.x+1][tmp.y])

}if(tmp.x-1>=1&&!flag[tmp.x-1][tmp.y])

}if(tmp.y+1

<=n&&!flag[tmp.x][tmp.y+1])

}if(tmp.y-1>=1&&!flag[tmp.x][tmp.y-1])}}

cout

<<"no"

}void prepare()

int main()

search();

}return

0;}

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...

廣度優先搜尋

include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...

廣度優先搜尋

廣度優先搜尋詳解 1.也稱寬度優先搜尋,顧名思義,就是將一棵樹一層一層往下搜。演算法首先搜尋和s距離為k的所有頂點,然後再去搜尋和s距離為k l的其他頂點。bfs是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...