zoukankan      html  css  js  c++  java
  • DFS练习

    #include<cstdio>
    #include<iostream>
    using namespace std;
    char maze[9][9];
    int n,m,t,flag;
    int starti,startj,endi,endj;
    int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    void DFS(int px,int py,int time)
    {
        if(flag==1) return;;
        if(px<1||px>n||py<1||py>m||time>t) return;
        if(px==endi&&py==endj&&time==t) {flag=1;return ;}
        if(maze[px][py]=='X') return ;
        for(int i=0;i<4;i++){
            maze[px][py]='X';
            DFS(px+dir[i][0],py+dir[i][1],time+1);
            maze[px][py]='.';
            if(flag==1) return;
        }
    int main(){
        while(cin>>n>>m>>t){
            if(n==0&&m==0&&t==0)
                break;
            int count=0;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++){
                    cin>>maze[i][j];
                    if(maze[i][j]=='S')
                    {
                        startj=j;
                        starti=i;
                    }
                    if(maze[i][j]=='D'){
                        endj=j;
                        endi=i;
                    }
                    if(maze[i][j]=='X')count++;
                }
            if(n*m-count<t) {
                cout<<"NO"<<endl;
                continue;
            }
            if((endi+endj+starti+startj+t)%2!=0) {
                cout<<"NO"<<endl;
                continue;
            }
            flag=0;
            DFS(starti,startj,0);
            if(flag==1){
                cout<<"YES"<<endl;
            }
            else cout<<"NO"<<endl;
        }
        return 0;
    }

    DFS    :要点 奇偶剪枝 即无论怎么走 总与最短路径相差一个偶数,所以要求步数于最短步数之和肯定为偶;

         dfs更深的理解  总要记录每一个走过的点等走完后在撤销,并且是求一个联通路径,记住找到后标记推出不然体现不出dfs与bfs的优势

  • 相关阅读:
    【EF Code First】CodeFirst初始配置
    【HTML5】炫丽的时钟效果Canvas绘图与动画基础练习
    C# MongoDB--时区问题(差了8小时)
    【HTML5】Canvas绘制基础
    判断数组与对象的方法
    javascript中的this
    实现动画效果
    js-改变this的指向
    js预编译
    js对象枚举
  • 原文地址:https://www.cnblogs.com/yzbpxx/p/10753250.html
Copyright © 2011-2022 走看看