zoukankan      html  css  js  c++  java
  • 【搜索1】P1605 迷宫

    题目背景

    迷宫 【问题描述】

    给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和

    终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫

    中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

    输入样例 输出样例

    【数据规模】

    1≤N,M≤5

    题目描述

    输入输出格式

    输入格式:

    【输入】

    第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点

    坐标FX,FY。接下来T行,每行为障碍点的坐标。

    输出格式:

    【输出】

    给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方

    案总数。

    输入输出样例

    输入样例#1: 复制
    2 2 1
    1 1 2 2
    1 2
    
    输出样例#1: 复制
    1



    题目思路:
    1.用2个数组dx[4],dy[4]的组合表示上下左右四个方向,
    2.搜索:从第一个节点开始,依次从它的上,下,左,右,方向开始搜索。如果第一次上可以走到s2,又对s2这个节点进行上下左右的搜索,直到四个方向都走不通,回到上一个节点。在此之中,如果到达了终点则总的次数加1.
    3.终点:第一个节点的所有方向的路径都被试探过则结束。

    伪代码模板:
    dfs(int k){
      if(已经到达这个点){
        路径数+1;
      for(四个方向都要遍历){
        if(可以向下走){
          先标记下一个方向d(k+1)被走过;
          dfs(下一个点);
          恢复下一个方向d(k+1);//因为在dfs遍历完一个方向后,应该继续遍历当前节点的其他方向
          }
        }
    }
    实现代码:
     1   
     2 #include<iostream>
     3 using namespace std;
     4 int a[100][100];
     5 int n,m,f, x0,y0,x1,y1;
     6 int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
     7 int s=0;
     8 void dfs(int x,int y){
     9     if(x==x1&&y==y1){
    10         s++;
    11         return ;
    12     }
    13     for(int i=0;i<=3;i++){
    14         int z=x+dx[i];
    15         int w=y+dy[i];
    16     //    cout<<"i"<<i<<endl;
    17         if(a[z][w]==0&& z<=n&&z>=1 &&w<=m && w>=1){
    18             a[z][w]=1;
    19     //        cout<<z<<"  "<<w<<endl;
    20             dfs(z,w);
    21             a[z][w]=0;
    22         }
    23     }
    24     
    25     
    26     
    27     
    28 }
    29 int main(){
    30 
    31     cin>>n>>m>>f;//行列
    32     int i,j;
    33     
    34     for(i=1;i<=n;i++){
    35         for(j=1;j<=m;j++){
    36             a[i][j]=0;
    37         }
    38     }
    39 
    40     cin>>x0>>y0>>x1>>y1;
    41     a[x0][y0]=1;
    42     int x2,y2;
    43     while(f--){
    44         cin>>x2>>y2;
    45         a[x2][y2]=1;
    46     }
    47     dfs(x0,y0);
    48      
    49     cout<<s<<endl;
    50     
    51     return 0;
    52 }
    53   
    View Code
    
    
  • 相关阅读:
    误报的java.sql.SQLException: Parameter number 21 is not an OUT parameter
    mysql bin-log和innodb_log的关系
    线上mysql内存持续增长直至内存溢出被killed分析(已解决)
    mysql服务器io等待高定位与分析
    mysql 5.6到percona 5.6小版本升级
    mysql内存消耗分析
    centos 7安装mysql报错-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory
    windows 7文件误删shift+delete后找回
    oschina github使用指南
    couchbase单向同步
  • 原文地址:https://www.cnblogs.com/yitou13/p/10057992.html
Copyright © 2011-2022 走看看