百练 鸣人和佐助(优先队列+BFS)

这也是一个迷宫题,通过这个题继续复习优先队列的使用

这个题的优先队列条件是在步数相同的情况下,优先走查克拉消耗小

题目链接

#include 
#include 
#include 
using namespace std;

int m,n,t;
char mp[205][205];
int vis[205][205];
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
struct node//依然是优先队列的使用 
{
	int x;
	int y;
	int chakela;
	int step;
	node(int a,int b,int c,int d)
	{
		x = a;
		y = b;
		chakela = c;
		step = d;
	}
	node(){}
	bool operator < (const node &a) const //按照查克拉最小值优先 结构体优先队列 
	{
		if(a.step==step)
		{
			return a.chakela pq;
void bfs()
{
	pq.push(s);
	vis[s.x][s.y] = 1;
	while(pq.size())
	{
		temp = pq.top();
		pq.pop();
		if(temp.x==tt.x&&temp.y==tt.y)
		{
			printf("%d\n",temp.step);
			exit(0) ;
		} 
		for(int i=0;i<4;i++)
		{
			int nx = temp.x+dx[i];
			int ny = temp.y+dy[i];
			if(nx>=0&&nx=0&&ny

迷宫一般问题都不要忘记那个标记已经走过得数组

但是还差一个变种的迷宫题没有解决,即有钥匙可以重复走的迷宫,暂时还没有理解到方法...

你可能感兴趣的:(BFS,数据结构)