有人能解释一下吗
查看原帖
有人能解释一下吗
99742
zyh694009800楼主2020/7/21 12:52
#include<bits/stdc++.h>
using namespace std;
int i,j,n,m,xx,yy,zo,shu,zoo,a,b;
char t[1001][100001];
bool tt[1001][100001];
int zx[1001][100001];
int zy[1001][100001];
int su[1001][100001];
int yi(int x,int y)
{
	if(tt[x+1][y]&&t[x][y]!=t[x+1][y]&&x+1<=n)
	{
		zx[x+1][y]=zx[x][y];
		zy[x+1][y]=zy[x][y];
		tt[x+1][y]=false;zo=zo-1;
		yi(x+1,y);
	}
	if(tt[x][y+1]&&t[x][y]!=t[x][y+1]&&y+1<=n)
	{
		zx[x][y+1]=zx[x][y];
		zy[x][y+1]=zy[x][y];
		tt[x][y+1]=false;zo=zo-1;
		yi(x,y+1);
	}
	if(tt[x-1][y]&&t[x][y]!=t[x-1][y]&&x-1>0)
	{
		zx[x-1][y]=zx[x][y];
		zy[x-1][y]=zy[x][y];
		tt[x-1][y]=false;zo=zo-1;
		yi(x-1,y);
	}
	if(tt[x][y-1]&&t[x][y]!=t[x][y-1]&&y-1>0)
	{
		zx[x][y-1]=zx[x][y];
		zy[x][y-1]=zy[x][y];
		tt[x][y-1]=false;zo=zo-1;
		yi(x,y-1);
	}
}
int main()
{
	cin>>n>>m;
	zo=n*n;shu=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>t[i][j];
			zx[i][j]=i;zy[i][j]=j; 
		}
	}
	for(int i=1;i<=n;i++)
	{
	    for(int j=1;j<=n;j++)
	    {
		    tt[i][j]=true;
	    }
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(tt[i][j])
			{
			    zoo=zo;
				zo=zo-1;
				yi(i,j);su[i][j]=zoo-zo;
			}
		}
	}
	for(int i=1;i<=m;i++)
	{
		cin>>a>>b;
		if(su[zx[a][b]][zy[a][b]]==1)
		{
			cout<<1<<endl;
		}else{
			cout<<su[zx[a][b]][zy[a][b]]-1<<endl;
		}
	}
	return 0;
}

我自己的代码我自己都不知道原理是什么。最后的输出为什么要-1呢?

2020/7/21 12:52
加载中...