• poj--3984--迷宫问题(bfs+路径记录)


    Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u

    Status

    Description

    定义一个二维数组:
    int maze[5][5] = {
    
     0, 1, 0, 0, 0,
    
     0, 1, 0, 1, 0,
    
     0, 0, 0, 0, 0,
    
     0, 1, 1, 1, 0,
    
     0, 0, 0, 1, 0,
    
    };

    它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

    Input

    一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

    Output

    左上角到右下角的最短路径,格式如样例所示。

    Sample Input

    0 1 0 0 0
    0 1 0 1 0
    0 0 0 0 0
    0 1 1 1 0
    0 0 0 1 0

    Sample Output

    (0, 0)
    (1, 0)
    (2, 0)
    (2, 1)
    (2, 2)
    (2, 3)
    (2, 4)
    (3, 4)
    (4, 4)


    这道题不难,只是以前路径记录没有掌握好,水一水

    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<stack>
    #include<algorithm>
    using namespace std;
    #define MAX 10
    int map[MAX][MAX];
    bool vis[MAX][MAX];
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,-1,1};
    struct node
    {
    	int x,y,prex,prey;
    };
    node path[MAX][MAX];
    node st,ed;
    void putpath(int x,int y)
    {
    	stack<node>p;
    	node now=path[x][y];
    	while(1)
    	{
    		p.push(now);
    		if(now.x==0&&now.y==0)
    		break;
    		now=path[now.prex][now.prey];
    	}
    	while(!p.empty())
    	{
    		now=p.top();
    		p.pop();
    		printf("(%d, %d)
    ",now.x,now.y);
    	}
    }
    bool check(node a)
    {
    	if(map[a.x][a.y]==1||a.x<0||a.y>4||a.y<0||a.x>4)
    	return 0;
    	return 1;
    } 
    void bfs()
    {
    	memset(vis,0,sizeof(vis));
    	queue<node>q;
    	st.x=0,st.y=0;
    	q.push(st);
    	vis[0][0]=1;
    	while(!q.empty())
    	{
    		st=q.front();
    		q.pop();
    		if(st.x==4&&st.y==4)
    		{
    			path[st.x][st.y]=st;
    			break;
    		}
    		for(int i=0;i<4;i++)
    		{
    			ed.x=st.x+dx[i];
    			ed.y=st.y+dy[i];
    			if(check(ed)&&!vis[ed.x][ed.y])
    			{
    				vis[ed.x][ed.y]=1;
    				ed.prex=st.x;
    				ed.prey=st.y;
    				path[ed.x][ed.y]=ed;
    				q.push(ed); 
    			}
    		}
    	}
    }
    int main()
    {
    	for(int i=0;i<5;i++)
    	{
    		for(int j=0;j<5;j++)
    		scanf("%d",&map[i][j]);
    	}
    	bfs();
    	putpath(4,4);
    	return 0;
    }



  • 相关阅读:
    Spring Session设计思路
    Jinja2 is a full-featured template engine for Python
    Computer Science:《The Essence of Winning and Losing》
    开源 敏捷 devops Lean Startup Huawei CRM
    BRMS ILOG
    日志易 IDS Snort 入侵检测
    理解和了解别人的正确姿势
    谷歌趋势 Google Trends
    OpenZipkin · A distributed tracing system
    Arthas OAM
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273706.html
Copyright © 2020-2023  润新知