为什么两个代码输出结果不一样?QAQ
查看原帖
为什么两个代码输出结果不一样?QAQ
915813
luoyu07楼主2024/9/17 15:45

代码1:

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

const int N=105;
int n,m,ans;
int g[N][N]; 
int d[N][N];

void dfs(int u,int v)
{
	pair<int,int>t(u,v);
	int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
	d[u][v]=1;
	cout<<"("<<u<<","<<v<<")";
	for(int i=0;i<4;i++){
		int x=t.first+dx[i],y=t.second+dy[i];
		if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]&&d[x][y]==-1){
			dfs(x,y);	
		}
	}
}
int main()
{
	memset(d,-1,sizeof d);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++) scanf("%1d",&g[i][j]);
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			if(g[i][j]&&d[i][j]==-1){
				ans++;
				dfs(i,j);
				puts("");
			} 
	cout<<ans;
	return 0;
}

输入:

4 10

0234500067
1034560500
2045600671
0000000089

输出:

(0,1)(0,2)(1,2)(2,2)(2,3)(1,3)(0,3)(0,4)(1,4)(2,4)(1,5)
(0,8)(0,9)
(1,0)(2,0)
(1,7)(2,7)(2,8)(3,8)(3,9)(2,9)
4

代码二:

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

const int N=105;
int n,m,ans;
int g[N][N]; 
int d[N][N];
pair<int,int>t;
void dfs(int u,int v)
{
	t=make_pair(u,v);
	int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
	d[u][v]=1;
	cout<<"("<<u<<","<<v<<")";
	for(int i=0;i<4;i++){
		int x=t.first+dx[i],y=t.second+dy[i];
		if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]&&d[x][y]==-1){
			dfs(x,y);	
		}
	}
}
int main()
{
	memset(d,-1,sizeof d);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++) scanf("%1d",&g[i][j]);
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			if(g[i][j]&&d[i][j]==-1){
				ans++;
				dfs(i,j);
				puts("");
			} 
	cout<<ans;
	return 0;
}

输入

4 10
0234500067
1034560500
2045600671
0000000089

输出

(0,1)(0,2)(1,2)(2,2)(2,3)(1,3)(0,3)(0,4)(1,4)(2,4)
(0,8)(0,9)
(1,0)(2,0)
(1,5)
(1,7)(2,7)(2,8)(3,8)(3,9)(2,9)
5
2024/9/17 15:45
加载中...