全部RE了

P1162 填涂颜色

Martin6688 @ 2024-08-17 15:05:16

求大佬调 样例对了,自己测试了几个数据也是对的 但是提交就全部RE了

#include <bits/stdc++.h>
#define int long long
using namespace std;

typedef unsigned long long ull;
typedef long long ll;

int a[32][32];
bool vis[32][32];
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};

void dfs(int x,int y)
{
    vis[x][y]=1;
    for(int i=0;i<4;i++)
    {
        if(a[x+dx[i]][y+dy[i]]==0&&vis[x+dx[i]][y+dy[i]]==0)
        {
            dfs(x+dx[i],y+dy[i]);
        }
    }
    return ;
}

signed main() 
{
    int n,m;
    cin>>n;
    m=n;
    memset(a,0,sizeof(a));
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    dfs(0,0);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==0&&vis[i][j]==0)
            {
                cout<<2<<" ";
            }
            else
            {
                cout<<a[i][j]<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

by LiJinwen20130617 @ 2024-08-17 17:53:10

额——我也是小白,不会调代码,这是我的AC代码,要不你拿去看看?

#include <bits/stdc++.h>
using namespace std;
int vis[35][35],dt[35][35];
int n;
int fx[4]={0,0,-1,1};
int fy[4]={1,-1,0,0};
void dfs(int x,int y){
    vis[x][y]=1;
    for(int i=0;i<4;i++){
        int tx=x+fx[i];
        int ty=y+fy[i];
        if(tx>=1&&tx<=n&&ty<=n&&ty>=1&&vis[tx][ty]==0&&dt[tx][ty]==0){
            dfs(tx,ty);
        }
    }
}
int main(){
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin >> dt[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        if(dt[i][n]==0) dfs(i,n);
        if(dt[i][1]==0) dfs(i,1);
        if(dt[1][i]==0) dfs(1,i);
        if(dt[n][i]==0) dfs(n,i);
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(vis[i][j]==1) cout << 0 << " ";
            else if(dt[i][j]==1) cout << 1 << " ";
            else cout << 2 << " ";
        }
        cout << endl;
    }
    return 0;
}

by LiJinwen20130617 @ 2024-08-17 17:58:50

会不会是要四周全搜索一遍,就像这样:

for(int i=1;i<=n;i++){
    if(dt[i][n]==0) dfs(i,n);
    if(dt[i][1]==0) dfs(i,1);
    if(dt[1][i]==0) dfs(1,i);
    if(dt[n][i]==0) dfs(n,i);
}

我也是猜的哈,你要不试试改改?


by lyb_qhd @ 2024-09-29 11:30:03

本地debug:输出正确,返回值有问题(无效访问)

代码阅读题:dfs没加有效判断 是否到达边缘。

不应该啊,应该直接崩溃的啊

要不加个有效判断?

#include <bits/stdc++.h>
#define int long long
using namespace std;

typedef unsigned long long ull;
typedef long long ll;
int n,m;

int a[33][33];
bool vis[33][33];
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};

void dfs(int x,int y)
{
    vis[x][y]=1;
    for(int i=0;i<4;i++)
    {
        if (x+dx[i]>=0   &&
            x+dx[i]<=n+1 &&
            y+dy[i]>=0   &&
            y+dy[i]<=n+1 &&
            a[x+dx[i]][y+dy[i]]==0 &&
            vis[x+dx[i]][y+dy[i]]==0)
        {
            dfs(x+dx[i],y+dy[i]);
        }
    }
    return ;
}

signed main() 
{

    cin>>n;
    m=n;
    memset(a,0,sizeof(a));
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    dfs(0,0);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==0&&vis[i][j]==0)
            {
                cout<<2<<" ";
            }
            else
            {
                cout<<a[i][j]<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

|