HDU-1242——DFS+优先队列

题意大概就是:

从起点r到终点a的最短距离,

经过 . 那么时间加1;

经过 x 那么时间加2;

# 代表障碍不能通过;

也有可能没有a。。。。。

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

struct node
{
	int x,y,step;
	friend bool operator<(node a ,node b)
	{
		return b.step=n || y>=m || !vis[x][y] || ch[x][y] == '#')
        return 1;
    return 0;
}

int bfs()
{
	int i;
	priority_queue Q;
	node a,next;
	a.x=sx;
	a.y=sy;
	a.step=0;
	Q.push(a);
	vis[sx][sy]=0;
	while(!Q.empty())
	{
		a=Q.top();
		Q.pop();
		if(a.x==ex&&a.y==ey)
        {
            return a.step;
        }

		for(int i=0;i<4;i++)
		{
			next=a;
			next.x+=to[i][0];
			next.y+=to[i][1];
			if(check(next.x,next.y))
                continue;

				    next.step++;
                    if(ch[next.x][next.y]=='x')
                    next.step++;
                    if(vis[next.x][next.y]>=next.step)
                    {

                        vis[next.x][next.y]=next.step;
                        Q.push(next);

                    }
		}
	}
	return 0;
}

int main()
{
	freopen("in.in","r",stdin);
	while(scanf("%d %d",&n,&m)!=EOF)
	{
		for(int i=0;i



你可能感兴趣的:(搜索)