1. 程式人生 > >洛谷p1162填塗顏色(bfs題目)

洛谷p1162填塗顏色(bfs題目)

原題網址
本題是我第一個用bfs的題目,bfs是隊裡的shawnzhou大佬教我的,在這裡先感謝他一下啦 這個題的思路也是他提供的,還是需要一定的練習才行鴨!!
對於本題來說的話,先將外面的0塗成2 然後遍歷圖,將0和2塗反色就可以了 注意bfs的使用哦~
程式碼實現:

#include<bits/stdc++.h>
using namespace std;
int a[100][100];
bool vis[100][100];
int n;
struct node {
  int x;
  int y;
};
int dx[]={0,1,-1,0};
int dy[]={1,0,1,-1}
; bool check(int x,int y) { if(x>=0&&x<=n+1&&y>=0&&y<=n+1) return true; return false; } void bfs(int x,int y) { queue<node>q; node s; s.x=x; s.y=y; q.push(s); a[s.x][s.y]=2; vis[s.x][s.y]=true; while(!q.empty()) { node u=q.front(); q.
pop(); for(int i=0;i<4;i++) { node w; w.x=u.x+dx[i]; w.y=u.y+dy[i]; if(check(w.x,w.y)) { if((!vis[w.x][w.y])&&a[w.x][w.y]==0) { vis[w.x][w.y]=true; a[w.x][w.y]=2; q.push(w); } } } }
} int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; bfs(0,0); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(a[i][j]==0) cout<<2<<" "; if(a[i][j]==1) cout<<1<<" "; if(a[i][j]==2) cout<<0<<" "; } cout<<endl; } }

佇列還真是基礎呢