zoukankan      html  css  js  c++  java
  • 算法提高 学霸的迷宫

    记录路径问题和层数利用结构体变量可以很容易的实现 这里要求路劲字典序列最小 改变一下优先的方向就可以了(注意实际方向和二维数组的对应关系,坑死我了),还有就是vis数组,,居然忘记了,活该超时。

    太久没写,细节没处理好,,交了几发wa 加油加油。。

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<queue>
    #include<cstring>
    using namespace std;
    struct node
    {
        int ret,x,y;
        string line;// 记录路劲
    };
    int n,m;
    int mapp[501][501],vis[501][501];
    int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0}};// 注意实际方向和坐标的区别
    string root="DLRU";
    int check(int x,int y)
    {
        if(mapp[x][y]==1) return 0;
        if(x<1||x>n||y<1||y>m) return 0;
        return 1;
    }
    void dfs()
    {
        node temp;
        temp.ret=0;
        temp.x=temp.y=1;
        temp.line+='@';
        memset(vis,0,sizeof(vis));
        vis[1][1]=1;
        queue<node> que;
        que.push(temp);
        while(!que.empty())
        {
            node now=que.front();
            que.pop();
            if(now.x==n&&now.y==m)
            {
                cout<<now.line.size()-1<<endl;
                for(int i=1;i<now.line.size();i++) cout<<now.line[i];
                cout<<endl;
                return;
            }
            for(int i=0;i<4;i++)
            {
                int xx=now.x+dir[i][0];
                int yy=now.y+dir[i][1];
                if(check(xx,yy)&&!vis[xx][yy])
                {
                    vis[xx][yy]=1;
                    node temp;
                    temp.x=xx;
                    temp.y=yy;
                    //temp.ret=++now.ret;
                    temp.line+=now.line;
                    temp.line+=root[i];
                    que.push(temp);
                }
            }
        }
    
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        cin.sync_with_stdio(false);
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            string fuck;
            cin>>fuck;
            for(int j=1;j<=m;j++) mapp[i][j]=fuck[j-1]-'0';
        }
        dfs();
        return 0;
    }
  • 相关阅读:
    C++类型转换(字符串)
    GDI+ 中Image::FromStream ,用流的方式显示图像
    mfc对话框序列化实例
    配置android开发环境eclipse获取ADT获取不到(转)
    vs开发错误总结
    MFC获取文件操作
    Android系统架构剖析(转)
    OpenCV 图像采样 插值 几何变换
    C++ char*,char[],string,CString转换
    Simscape Multibody 教程 —— 入门学习
  • 原文地址:https://www.cnblogs.com/z1141000271/p/6661490.html
Copyright © 2011-2022 走看看