算法题:BFS之出门最佳

题目:

算法题:BFS之出门最佳_第1张图片

算法题:BFS之出门最佳_第2张图片

算法题:BFS之出门最佳_第3张图片

算法题:BFS之出门最佳_第4张图片


思路:

1.先根据输入的机器辐射值对房屋内的点进行辐射标记,若在辐射范围内,则标记为-1,不在辐射范围的标记为0;

2.从出发点开始进行广度优先遍历,并不断的更新当前路径长,结束条件为到达出口或遍历结束;

注意:ray数组有两个作用,刚开始用来标记辐射值,开始遍历后用来记录当前路径长;


代码:

#include 
using namespace std;


int adj[4][2]={0,1,0,-1,1,0,-1,0};//用来四个方向遍历

typedef struct{
	int x,y;
}room;

void process(int n, int m, int i, int j, int**r)
{
	if (i>=0 && i=0 && j Q;
	room beginroom;
	beginroom.x=b.x;
	beginroom.y=b.y;

	if (ray[b.x][b.y]==-1)
	{
		return -1;
	}

	Q.push(beginroom);
	while(!Q.empty())
	{
		room curroom = Q.front();
		Q.pop();
		if (curroom.x==e.x && curroom.y==e.y)
			return ray[e.x][e.y];//到达出口
		for(int i=0;i<4;i++)
		{
			int tx=curroom.x + adj[i][0];
			int ty=curroom.y + adj[i][1];
			if (tx>=0 && tx=0 && ty>n)
	{
		int m;//列
		cin>>m;
		room b,e;
		cin>>b.x;
		cin>>b.y;
		cin>>e.x;
		cin>>e.y;
		int **ray = new int*[n];//辐射数组
		int v;
		for (int i=0;i>v;
				for (int k=0;k
	}

	return 0;
}




你可能感兴趣的:(算法)