奇怪的贪心算法

P1162 填涂颜色

#include<bits/stdc++.h> using namespace std; string a[60]; int main() { int n,i,j,k; cin >>n; for (j=0;j<n;j++)cin >>a[0][j]; for (i=1;i<n;i++) { for (j=0;j<n;j++)cin >>a[i][j]; j=0;bool f=false;int p=0,q=0; for (j=0;j<n;j++) { if (a[i][j]=='1') { while (a[i][j]=='1') { if (a[i-1][j]=='1' )f=not f;j++; } if (f==true) { while (j<n && a[i][j]=='0'){ a[i][j]='2'; j++; } } j--; } } } for (i=0;i<n;i++) { for (j=0;j<n;j++) cout <<a[i][j]<<' '; cout <<"\n"; } return 0; }
by emmmm_lq @ 2018-11-25 20:29:52


//希望更丰富的展现?使用Markdown 我用的$(0,0)$开始搜,附上我很丑的码风供你参考一下吧 ```cpp #include<iostream> #include<cstdio> int a[100][100],n; bool vis[100][100],f; void dfs(int,int); void paint(); using namespace std; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); dfs(0,0); paint(); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) if(f) printf(" %d",a[i][j]); else printf("%d",a[i][j]),f=1; f=0; printf("\n"); } return 0; } void dfs(int x,int y) { if(vis[x][y]||a[x][y]||x>n+1||y>n+1||x<0||y<0) return; vis[x][y]=1; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); } void paint() { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(!a[i][j]&&!vis[i][j]) a[i][j]=2; } ``` odk
by UniC @ 2018-11-25 20:39:54


你这个string用的很玄学啊,建议你用int比较稳,数字矩阵就没必要上string……
by UniC @ 2018-11-25 20:41:23


看不到你的数组开到哪里了,是不是太小了(我没看你的代码)
by UniC @ 2018-11-25 20:42:06


|