0
点赞
收藏
分享

微信扫一扫

[USACO19JAN]Icy Perimeter S(DFS,BFS)

心智的年轮 2022-04-21 阅读 44
c++算法

 BFS:

#include <iostream>
#include <cstring>
#include <queue>

using namespace std;
struct node
{
	int x,y;
};
int n,ans=0,sum=0,imax=-1,iimax=-1,book[1010][1010],m[1010][1010];
char p[1010][1010];
int inext[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};

void bfs(int x,int y)
{
	queue <node> q;
	q.push({x,y});
	while(!q.empty())
	{
		node head=q.front();
		q.pop();

		for(int i=0; i<4; i++)
		{

			int tx=head.x+inext[i][0];
			int ty=head.y+inext[i][1];
			if(!m[tx][ty]) ans++;
			if(tx<1||ty<1||tx>n||ty>n||book[tx][ty]||!m[tx][ty]) continue;
			book[tx][ty]=1;
			sum++;
			q.push({tx,ty});

		}
	}

}
int main()
{
	cin >> n;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
		{
			cin >> p[i][j];
			if(p[i][j]=='#') m[i][j]=1;
			else m[i][j]=0;
		}
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
		{
			if(m[i][j]&&!book[i][j])
			{

				ans=0,sum=1;
				book[i][j]=1;
				bfs(i,j);
				if(imax<sum)
				{
					imax=sum;
					iimax=ans;
				}
				else if(imax==sum)
				{
					iimax=min(ans,iimax);
				}

			}
		}
	}
	cout << imax << ' ' << iimax ;

}

DFS: 

#include <iostream>

using namespace std;
int n,ans=0,sum=0,imax=-1,iimax=-1,book[1010][1010],m[1010][1010];
char p[1010][1010];
int inext[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};

void dfs(int x,int y)
{
	if(x<1||y<1||x>n||y>n||book[x][y]||p[x][y]=='.') return;
	sum++;
	book[x][y]=1;
	for(int i=0; i<4; i++)
	{
		int tx=x+inext[i][0];
		int ty=y+inext[i][1];
		if(m[tx][ty]==0) ans++;
		else dfs(tx,ty);
	}
}
int main()
{
	cin >> n;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
		{
			cin >> p[i][j];
			if(p[i][j]=='#') m[i][j]=1;
			else m[i][j]=0;
		}
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
		{
			if(m[i][j]&&!book[i][j])
			{

				ans=0,sum=0;
				dfs(i,j);
				if(imax<sum)
				{
					imax=sum;
					iimax=ans;
				}
				else if(imax==sum)
				{
					iimax=min(ans,iimax);
				}

			}
		}
	}
	cout << imax << ' ' << iimax ;

}

 

举报

相关推荐

BFS/DFS

洛谷----P3612 [USACO17JAN]Secret Cow Code S

bfs和dfs

BFS和DFS

DFS和BFS

Pots(DFS &BFS)

0 条评论