zoukankan      html  css  js  c++  java
  • 迷宫最短路

    #include<iostream>
    #include<queue>
    #include<cstring>
    #include<cstdio>
    #define MAX 100
    using namespace std;
    const int INF = 10;
    typedef pair<int, int >P;
    int  d[MAX][MAX];
    char imap[MAX][MAX];
    int n, m;
    int sx, sy;
    int gx, gy;
    int To[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
    int bfs()
    {
    	for (int i = 0; i < n; i++)
    		for (int j = 0; j < m; j++)
    			d[i][j] = INF;
    	queue<P>que;
    	que.push(P(sx, sy));
    	d[sx][sy] = 0;
    	while (que.size())
    	{
    		P t = que.front(); que.pop();
    		if (t.first == gx&&t.second == gy)break;
    		for (int i = 0; i < 4; i++)
    		{
    			int nx = To[i][0] + t.first;
    			int ny = To[i][1] + t.second;
    			if (nx >= 0 && nx < n&&ny >= 0 && ny < m&&imap[nx][ny] != '#'&&d[nx][ny] ==INF)
    			{
    				que.push(P(nx, ny));
    				d[nx][ny] = d[t.first][t.second] + 1;
    			}
    		}
    	}
    	return d[gx][gy];
    }
    struct node
    {
    	int x;
    	int y;
    	int r;
    	node(int X, int Y, int R) :x(X), y(Y), r(R){};
    	node() :x(0), y(0), r(0){};
    };
    int BFS()
    {
    	memset(d, 0, sizeof(d));
    	queue<node>que;
    	que.push(node(sx, sy, 0));
    	while (que.size())
    	{
    		node t = que.front(); que.pop();
    		d[t.x][t.y] = 1;
    		if (t.x == gx&&t.y == gy)
    			return t.r;
    		for (int i = 0; i < 4; i++)
    		{
    			int nx = To[i][0] + t.x;
    			int ny = To[i][1] + t.y;
    			if (nx >= 0 && nx < n&&ny >= 0 && ny < m&&imap[nx][ny] != '#'&&!d[nx][ny])
    				que.push(node(nx, ny, t.r + 1));
    		}
    	}
    	return INF;
    }
    int main()
    {
    	while (cin >> n >> m)
    	{	
    		int i, j;
    		for (i = 0; i < n; i++)
    			for (j = 0; j < m; j++)
    			{
    				cin >> imap[i][j];
    				if (imap[i][j] == 'S')
    				{
    					sx = i;
    					sy = j;
    				}
    				else if (imap[i][j] == 'G')
    				{
    					gx = i;
    					gy = j;
    				}
    			}
    		cout << "bfs:	" << bfs() << endl;
    		cout << "BFS:	" << BFS() << endl;
    	}
    	return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Java WebService 简单实例
    WCF、WebAPI、WCFREST、WebService之间的区别
    SpringMVC下的Shiro权限框架的使用
    SpringMVC详细示例实战教程
    JPA入门例子(采用JPA的hibernate实现版本)
    如果redis没有设置expire,他是否默认永不过期?
    jvm 年轻代、年老代、永久代
    Consumer group理解深入
    Java中GC的工作原理
    Flink 集群运行原理兼部署及Yarn运行模式深入剖析
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768491.html
Copyright © 2011-2022 走看看