求助递归
  • 板块灌水区
  • 楼主cwqluo
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/9/30 16:20
  • 上次更新2023/11/4 05:19:22
查看原帖
求助递归
516905
cwqluo楼主2021/9/30 16:20
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
char a[51][51];
double x[11], y[11];
int m, n, minbs;
bool b[11] = {0};//宝箱是否拿到,拿到后置1
int mhd(int x0,int y0,int ge)//x0、y0冒险者位置、ge宝箱数量、sheng从第几个出发宝箱,(函数功能找到最近宝箱)
{
	int min,minb=0;//最近宝箱序号minb
	double sx[10] = {0};
	for (int i = 1; i < ge; i++)
		{
		if (b[i]==1)
		{
			continue;
		}
			sx[i] = sqrt(pow(x[i]-x0, 2) + pow(y[i]-y0, 2));
		}
	min = sx[1];
	for (int i = 1; i < ge; i++)
	{
		if (sx[i]>min&&b[i]==0)
		{
			min = sx[i];
			minb = i;
		}
	}
	return minb;
}
void dsf(int x0,int y0,int x1,int y1,int mins)//x0、y0冒险者位置,x1、y1宝箱位置'x1y1可换成x[mb]'(函数功能找最少步数路线)minbs最小步数
{
	if (x0==x1 && y0==y1 && mins<minbs)
	{
		minbs = mins;
	}
	if (mins>10000)//走不到宝箱格
	{
		minbs=-1;
		return;
	}
	if (x0>1&&a[x0-1][y0]!='*')
	{
		dsf(x0-1, y0, x1, y1, mins + 1);
	}
	if (x0<m && a[x0 + 1][y0] != '*')
	{
		dsf(x0+1, y0, x1, y1, mins + 1);

	}
	if (y0>1 && a[x0][y0-1] == '*')
	{
		dsf(x0, y0-1, x1, y1, mins + 1);
	}
	if (y0<n && a[x0][y0+1] == '*')
	{
		dsf(x0, y0 + 1, x1, y1, mins + 1);
	}
	return;
}
int main()
{
	int t, z1 = 1, z2, s[6] = {0};
	cin >> t;
	for (int z = 0; z < t; z++)
	{
		cin >> m >> n;
		for (int i = 1; i <= m; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				cin >> a[i][j];
				if (a[i][j]>='0'&&a[i][j]<='9')//存下宝箱位置
				{
					x[z1] = i;
					y[z1] = j;
					z1++;
					
				}
				if (a[i][j]=='*')//存下冒险者初始位置
				{
					x[0] = i;
					y[0] = j;
				}
			}
		}
		int mb;
		for (int i = 0; i <z1; i++)
		{
			minbs = 10000;
			mb = mhd(x[0], y[0], z1);
			cout << mb;
			dsf(x[0],y[0],x[mb],y[mb],0);//找最少步数
			if (minbs == -1)
			{
				s[z] = -1;
				break;
			}
			s[z] = s[z] + minbs;
			x[0] = x[mb];
			y[0] = y[mb];
			b[mb] = 1;//表示拿到宝箱
		}
		for (int i = 0; i <= 11; i++)//转换宝箱状态给下一组数据用
		{
			b[i] = 0;
		}
		

	}
	for (int i = 0; i < t; i++)
	{
		cout << s[i];
	}
	return 0;
}

运行后bfs那里会出现错误,不知道怎么改

2021/9/30 16:20
加载中...