洛谷:P1162 填涂颜色(普及-,搜索)

题目:

在这里插入图片描述

分析:虽然是一道简单题,那为什么自己要写呢?

因为这涉及到了一点:换个角度的思想。

自己在做数学题经常可以想到,但在写代码的时候,基本上都会忘记。

代码:

#include<bits/stdc++.h>
using namespace std;
int A1[31][31];
int A2[31][31];
int m;
int D1[4]={1,-1,0,0};
int D2[4]={0,0,1,-1};
void dfs(int x,int y)
{
 if(x>=m||y>=m||y<0||x<0) return;
 if(A1[x][y]!=0) return;
 A1[x][y]=-1;
 for(int i=0;i<4;i++) dfs(x+D1[i],y+D2[i]);
}
int main()
{
 cin>>m;
 for(int i=0;i<m;i++)
 for(int j=0;j<m;j++) 
 {
  cin>>A1[i][j];  A2[i][j]=A1[i][j];
 }
 for(int i=0;i<m;i++) dfs(m-1,i);
 for(int i=0;i<m;i++) dfs(0,i);
 for(int i=0;i<m;i++) dfs(i,0);
 for(int i=0;i<m;i++) dfs(i,m-1);
 cout<<"-------"<<endl;
 for(int i=0;i<m;i++)
 {
  for(int j=0;j<m;j++) 
  {
   if(A1[i][j]==-1) cout<<0<<' ';
   if(A1[i][j]==0) cout<<2<<' ';
   if(A1[i][j]==1) cout<<1<<' ';
  }
  cout<<endl;
 }
 cout<<"-------"<<endl;
 for(int i=0;i<m;i++)
 {
  for(int j=0;j<m;j++) 
  {
   cout<<A1[i][j]<<' ';
  }
  cout<<endl;
 }
}

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/108234664