蒟蒻在线发问,请求各位大佬帮帮忙

P1162 填涂颜色

Yunjin @ 2021-08-10 14:23:20

我不知道哪里错了,大佬们可以帮我看看吗?

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[35][35],n,z = 0;
    cin>>n;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            cin>>a[i][j];
        }
    }
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            if((a[i][j]==1&&a[i+1][j+1]!=1)||(a[i][j]==2&&a[i+1][j+1]!=1)){
                a[i+1][j+1] = 2;
                if(a[i][j+1] == 0&&a[i+1][j+1]==1||2){
                    a[i][j+1] == 2;
                }
            }
            if((a[i+1][j]==1||2)||(a[i][j+1]==1||2)){
                a[i][j] == 2;
            } 
        }
    }
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }

    return 0;
}

by yyandy @ 2021-08-10 14:52:34

7
1 1 1 0 0 0 0
1 0 1 0 1 1 1
1 0 1 1 1 0 1
1 0 0 0 0 0 1
1 1 1 1 1 0 1
0 0 0 0 1 1 1
0 0 0 0 0 0 0    

hack,@叫我老赵子


by yyandy @ 2021-08-10 14:54:11

这题还是老老实实搜索吧。


by Yunjin @ 2021-08-10 15:11:51


by nju181840342 @ 2021-08-10 16:33:12

@叫我老赵子 很多问题,首先为什么1的右下角是0,就要把这个0变成2,1的左上角也可以是2,右下角也可以是0;其次==的优先级比||高,也就是说

a[i][j]==1||2;

等价于

(a[i][j]==1)||2

而2转化成逻辑变量时对应true,就是说2代表对,那么a[i][j]==1||2的值一定是对。这里不能偷懒,必须写成

a[i][j]==1||a[i][j]==2

最后,如果没有学过广度优先搜索就别做这题了,这题得用这个方法。


by Yunjin @ 2021-08-10 16:48:51

嗯,明白啦,谢谢各位


by 幸福_焦天傲 @ 2021-08-26 10:39:07

你好


|