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;
}