入门BFS求助 路径总数目
  • 板块灌水区
  • 楼主wangqz
  • 当前回复18
  • 已保存回复18
  • 发布时间2022/12/25 13:10
  • 上次更新2023/10/24 06:40:49
查看原帖
入门BFS求助 路径总数目
530676
wangqz楼主2022/12/25 13:10

#include<iostream>
#include<cstdio>
#include<cmath>

using namespace std;
const int size=21;
int map[size][size];
int f[size][size];

int head=0,tail=1;
int n,m,P; 
int flag=0;

int minfoot=1e3;
int sum=1;

int p[100000][4];
int main()

{
//	freopen("blessing.in","r",stdin);
//  freopen("blessing.out","w",stdout);
    
    ios::sync_with_stdio(false);
	cin.tie(NULL); // NULL
	
	cin>>n>>m>>P;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>map[i][j];
		
	p[1][1]=n,p[1][2]=m,p[1][3]=0; map[n][m]=1;
	while(head<tail)
	{
		head++;
		
		for(int k1=1;k1<=n;k1++)
			for(int k2=1;k2<=m;k2++)
	     		if(abs(p[head][1]-k1)+abs(p[head][2]-k2)<=P)
	     		{
	     			int x1=k1,y1=k2;
	     			if(x1==1 && y1==1)
					{
						if(flag==0)
						{
							flag=1;
							minfoot=p[tail][3]+1;
						}
						else if(p[tail][3]+1==minfoot)
							sum++;
					}
					
					else if(map[x1][y1]!=1 && !f[x1][y1] && x1>=1 && y1>=1 && x1<=n && y1<=n)
					{
						tail++;
						p[tail][1]=x1;
						p[tail][2]=y1;
						p[tail][3]=p[head][3]+1;
						f[x1][y1]=true;
					}
				}
	}
	cout<< minfoot << " " << sum ;
	return 0 ; 
} 
/*
10 10 2
  一二三四五六七八九十 
一0 0 0 0 0 0 0 0 0 0
二0 0 0 0 0 0 0 0 0 0
三1 1 1 1 1 1 1 1 1 1
四0 0 0 0 0 0 0 0 0 0
五0 0 0 0 0 0 0 0 0 0
六1 1 1 1 1 1 1 1 1 1
七0 0 0 0 0 0 0 0 0 0
八0 0 0 0 0 0 0 0 0 0
九1 1 1 1 1 1 1 1 1 1
十0 0 0 0 0 0 0 0 0 0


10 10 2
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0

*/

Rt 第一输出似乎没有问题,第二个似乎有那么一点问题,求调

2022/12/25 13:10
加载中...