Maze Exploration UVA 784 (简单的深度优先搜索)

说说:

这道题的题意,事先题目给你如下图所示:

XXXXXXXXX

X         X       X

X    *             X

X        X        X

XXXXXXXXX

X        X

X        X

X        X

XXXXX

可以把以上图像想象成一间房子,字符‘X‘是围墙,你现在所处的位置是‘*‘所在的地方,要求你将’*‘周围的空白,包括‘*‘本身全部用‘#代替。注意不能穿越围墙。其实就是最最基础的深度遍历的问题,只要找到‘*‘所在的位置,然后查看周围是否为空格,是则填上‘#‘,然后递归,否则函数直接返回即可。

源代码:

#include <stdio.h>
#include <string.h>
#define MAXW 80+5
#define MAXH 30+5

char room[MAXH][MAXW];

void dfs(int,int);

int main(){
  int T,n,x,y,i;
  freopen("data","r",stdin);
//  scanf("%d",&T);
  getchar();

  while(T--){
    n=0;
   while(gets(room[n]))
     if(room[n][0]=='_')
       break;
     else
       n++;

     for(x=0;x<n;x++)//找到初始位置
       for(y=0;y<strlen(room[x]);y++)
         if(room[x][y]=='*')
       	    dfs(x,y);

      for(x=0;x<=n;x++)
        printf("%s\n",room[x]);

  }

  return 0;
}

void dfs(int x,int y){

  if(room[x][y]==' '||room[x][y]=='*')
    room[x][y]='#';
  else
    return;
//对当前点的四周进行遍历
  dfs(x-1,y-1);dfs(x,y-1);dfs(x+1,y-1);
  dfs(x-1,y);             dfs(x+1,y);
  dfs(x-1,y+1);dfs(x,y+1);dfs(x+1,y+1);

  return ;
}
时间: 2024-12-10 08:16:16

Maze Exploration UVA 784 (简单的深度优先搜索)的相关文章

人员分配问题(简单的深度优先搜索题目)

问题描述 某单位有若干人员,现执行某任务需要一定人数人员.编写程序,输入单位人数和每位员工名字,再输入执行任务所需人数,输出所有可能派出人员方案 程序代码 #include<bits/stdc++.h> using namespace std; char s[10][20]; //存放读进来的人的名字,暂定人最多为10个 char ans[10][20]; //存放每一次生成的结果 int maxMan = 0; //存放执行任务所需人数 int times = 0; //存放总方案数 int

uva 784 Maze Exploration(DFS遍历图)

uva 784 Maze Exploration A maze(迷宫) of rectangular(矩形的) rooms is represented on a two dimensional(空间的) grid as illustrated(阐明) in figure 1a. Each point of the grid is represented by a character. The points of room walls are marked by the same charact

深度优先搜索 - 简单demo

输入一个数n,输出 1 ~ n 的全排列,例如输入 3,全排列则为:123,132,213,231,312,321 一共六种. 这里采用深度优先搜索来解决这个问题: #include<stdio.h> int n; int a[10],book[10]; //递归核心代码 void dfs(int step) { if(step == n+1){ //递归结束条件 for(int i=1;i<=n;i++){ printf("%d",a[i]); } printf(&

图算法系列-深度优先搜索与广度优先搜索

2.深度优先搜索 为了访问一个顶点,我们将它标记为已经访问过,然后递归的访问所有与子邻接的并且尚未标记的顶点,这就是深度优先搜索(DFS),DFS常用于解决路径问题. 比如下面的连通图,我们从顶点0开始对图进行探索 下面这个图显示了DFS处理时的递归调用树. DFS可以解决的问题:1)环检测:一个图中有环吗?该图是森林吗?2)简单路径:给定两个顶点,是否存在一条连接他们的路径3)简单连通性:无论何时使用DFS,都可以在线性时间内确定一个图是否连通4)顶点搜索:在给定顶点所在的同一个连通分量中有多

POJ 1979 Red and Black 深度优先搜索上手题

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21738   Accepted: 11656 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a

算法7-3:深度优先搜索

深度优先搜索最初是因为迷宫游戏而诞生的.在一个迷宫中,有一个入口和一个出口,其中只有一条路径能从入口到达出口.在走迷宫的时候,每次将走过的地方进行标记,遇到死胡同的时候可以沿着进来的路线后退,找到新的没走过的拐角再尝试新的路线.这种方法的效率很高,因为每个地方只需要走过一次即可.其实,这就是深度优先搜索. 深度优先搜索的目标就是系统化地遍历整个图,让算法的效率更高. 应用 深度优先搜索有几个非常典型的应用: 找出源顶点能到达的所有顶点 找出两个顶点之间的路径 判断两个顶点是否连通 基本思想 深度

从排列到组合——深度优先搜索

前段时间在洛谷3.0上刷到一个题,让本人挠头了一段时间,RT: 题目描述 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=34. 现在,要求你计算出和为素数共有多少种. 例如上例,只有一种的和为素数:3+7+19=29. 首先解决这个问题显

深度优先搜索-linux上浅显易懂的例子

上次看啊哈算法中的深度优先搜索,自己用的是linux(linux粉,windows黑,嘿嘿),字符界面,为了强化对这个的理解,就在linux上对这个例子的代码做了一点修改可以很清楚的看到整个搜索过程,相当于动态的展示吧,虽然不是动画,本来想用QT来写的,不过实在是没时间(其实是QT太久没用了.....) 深度优先搜索说到底就是一条道走到黑直到达到目的,然后再往回走,看看上次选择的地方是否还有别的路可以选择走.代码中定义了宏MAX_NUM=8, 就是8x8的迷宫, 用户输入开始点和结束点,找到开始

深度优先搜索(Depth-First-Search)精髓

引例:迷宫问题 首先我们来想象一只老鼠,在一座不见天日的迷宫内,老鼠在入口处进去,要从出口出来.那老鼠会怎么走?当然可以是这样的:老鼠如果遇到直路,就一直往前走,如果遇到分叉路口,就任意选择其中的一条继续往下走,如果遇到死胡同,就退回到最近的一个分叉路口,选择另一条道路再走下去,如果遇到了出口,老鼠的旅途就算成功结束了.  深度优先搜索的基本原则就是这样:按照某种条件往前试探搜索,如果前进中遭到失败(正如老鼠遇到死胡同)则退回头另选通路继续搜索,直到找到满足条件的目标为止.  递归程序设计 然而