欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

洛谷 P1162:填涂颜色解析

最编程 2024-01-08 22:12:51
...

AC代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<queue>
 4 using namespace std;
 5 
 6 #define maxN 103
 7 
 8 int n,a[maxN][maxN]={0};
 9 int dx[4]={-1,0,1,0};//上右下左
10 int dy[4]={0,1,0,-1};
11 void bfs(int x,int y);//在矩阵a[][]中,从(x,y)出发做广搜 
12 int main()
13 {
14     int i,j;
15     scanf("%d",&n);
16     for(i=1;i<=n;i++)
17         for(j=1;j<=n;j++)
18             scanf("%d",&a[i][j]);
19     bfs(0,0);
20     for(i=1;i<=n;i++)
21         for(j=1;j<=n;j++)
22         {
23             if(a[i][j]==0) a[i][j]=2;
24             else if(a[i][j]==3) a[i][j]=0;
25         }
26   
27       for(i=1;i<=n;i++)
28       {
29         for(j=1;j<=n;j++)
30             printf("%d ",a[i][j]);
31         printf("\n");
32     }
33     return 0;
34 }
35 void bfs(int x,int y)//在矩阵a[][]中,从(x,y)出发做广搜
36 {
37     queue<int> qx,qy;
38     int xx,yy;
39     qx.push(x);  qy.push(y);
40     a[x][y]=3;
41     
42     while(!qx.empty())
43     {
44         for(int i=0;i<4;i++)
45         {
46             xx=qx.front()+dx[i];  yy=qy.front()+dy[i];
47             if(xx>=0&&xx<=n+1&&yy>=0&&yy<=n+1&&a[xx][yy]==0)
48             {
49                 qx.push(xx);  qy.push(yy);
50                 a[xx][yy]=3;
51             }
52         }
53         qx.pop();  qy.pop();
54     }
55 }