站外题求调(小号关注)
  • 板块灌水区
  • 楼主Guo1
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/6 17:31
  • 上次更新2024/7/6 19:55:04
查看原帖
站外题求调(小号关注)
743879
Guo1楼主2024/7/6 17:31

给定一个01矩阵,试求出矩阵中每个数字到最近的0的距离。矩阵中一个数字和上下左右的4个数字相邻,距离为1。如果一个数字就是0,则到最近的0的距离为0。

第一行,一个正整数n,表示矩阵的大小接下来n行,每行n个整数,用空格隔开,每个数字为0或1

输出矩阵中每个位置的数字到最近的0的距离

样例输入:

3
0 0 0
0 1 0
1 1 1

输出:

0 0 0
0 1 0
1 2 1

代码奉上:

#include<bits/stdc++.h>
using namespace std;
int n,a[101][101],dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},minn=2e9;
bool v[101][101];
void dfs(int x,int y,int step)
{
	if(a[x][y]==0)
	{
		minn=min(minn,step);
		return;
	}
	v[x][y]=1;
	for(int i=0;i<4;i++)
	{
		int xx=x+dx[i],yy=y+dy[i];
		//cout<<xx<<' '<<yy<<endl;
		if(xx>n||yy>n||xx<1||yy<1||v[xx][yy]) continue;
		return dfs(xx,yy,step+1);
	}
	v[x][y]=0;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			memset(v,0,sizeof v);
			minn=2e9;
			dfs(i,j,0);
			cout<<minn<<' ';
		}
		puts("");
	}
	/*dfs(3,3,0);
	cout<<minn<<endl;*/
	return 0;
}

数据范围不用管,坑定不超时

2024/7/6 17:31
加载中...