題目描述:
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是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...