求助:dfs第六个点tle了怎么办,谢谢
查看原帖
求助:dfs第六个点tle了怎么办,谢谢
358677
FishingRod楼主2020/9/28 23:09
#include<bits/stdc++.h>
using namespace std;

int mp[105][105];
bool vis2[105][105];
bool vis[105][105];
int xx[]={1,-1,0,0};
int yy[]={0,0,1,-1};
int sum=0,n,m;

void dfs(int x,int y)
{
	for(int i=0;i<4;i++)
	{
		int dx=x+xx[i];
		int dy=y+yy[i];
		if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&mp[dx][dy])
		{
			vis[dx][dy]=1;
			vis2[dx][dy]=1;
			dfs(dx,dy);
			vis[dx][dy]=0;
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			char x;
			cin>>x;
			mp[i][j]=x-'0';
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(mp[i][j]&&!vis2[i][j])
			{
				vis[i][j]=1;
				vis2[i][j]=1;
				dfs(i,j);
				sum++;
			}
		}
	}
	cout<<sum;
	return 0;
}
2020/9/28 23:09
加载中...