洛谷普及練習場 廣度優先搜尋

2021-09-10 21:46:54 字數 1687 閱讀 5999

p1162 填塗顏色

#includeusing namespace std;

int mp[35][35];

bool inq[35][35];

int n;

pairnode(0,0);

int dr[8][2]=

,,,};

void bfs());

inq[newx][newy]=true;}}

}}int main()

}bfs();

for(int i=1;i<=n;++i)

printf("\n");

} }

說明:可以把題目中矩陣的邊界設為[1,n],留出第0行、第0列、第n+1行和第n+1列(初值為0),從(0,0)開始搜尋,標記和(0,0)連通的塊(用 bool inq 標記),那麼被標記的連通塊一定是1形成的閉合圈以外的所有塊。

p1141 01迷宮

#include#include#include#includeusing namespace std;

struct nodenode;

int n,m,ans;

char a[1001][1001];

int vis[1001][1001];

int mark=1;

int res[100005];

int x[4]=,y[4]= ;

void bfs());//

vis[newx][newy]=mark;

++ans;}}

}res[mark]=ans;

mark++;

}int main()

for(int i=0;i說明:

1.a點若能到達b點,b點也一定能到達a點,求連通塊的數目並儲存,下次遇到直接查詢。不用這個方法會tle。

2.inq陣列不僅能標記某點是否已入隊(防止重複入隊),在此題中可以直接利用它儲存每個點連通塊的數目。

p1443 馬的遍歷

#includeusing namespace std;

struct nodenode;

int inq[405][405];

int n,m,ans;

int dr[8][2]=,,

,,,,

,};void bfs());

inq[nx][ny]=inq[top.x][top.y]+1;}}

}}int main()

cout<<"\n";

}}

說明:

1.這題關鍵在於dr[8][2]陣列儲存的方向(馬走日)。

2.起始點的inq為1,走到的其他點為inq[nx][ny]=inq[top.x][top.y]+1。輸出inq[i][j]-1正好滿足題目要求(起始點為0,不能到達則輸出-1)。

3.左對齊,寬5格 這樣寫:printf(" %-5d " , inq[i][j] - 1)。而cout<

%-5d是首列左對齊,輸出字元間5個空格

%5d是直接輸出字元間5個空格不左對齊

像如下:

%-5d

1 2 3 4

%5d 1 2 3 4

普及練習場 廣度優先搜尋 P1141 01迷宮

題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入輸出格式 輸入格式 輸入的第1行為兩個正整數n,m。...

洛谷試煉場 普及練習場 貪心

1.p1090合併果子 noip2004 優先佇列 貪心 題目鏈結 題目鏈結 2.p1181數列分段 貪心 題目鏈結 蒟蒻題解 3.p1208 usaco1.3 貪心 題目鏈結 蒟蒻題解 4.p1223排隊接水 貪心 題目鏈結 蒟蒻題解 5.p1094紀念品分組 noip2007普及 貪心 題目鏈結...

普及練習場 深度優先搜尋 P1605 迷宮

題目描述 給定乙個n m 1 n,m 5 方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入輸出格式 輸入格式 第一行n m和t,n為行...