当前位置: 代码迷 >> 综合 >> hdu-1312 Red and Black(dfs)
  详细解决方案

hdu-1312 Red and Black(dfs)

热度:79   发布时间:2023-11-23 02:11:22.0

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312

题目大意:点是路,#是墙,输出从起始位置能走多少步

题解:dfs函数两个参数x,y记录当前坐标。从起始位置开始深搜,如果当前位置是‘#’则不进行下一步搜索,如果是 。 则把sum+1,并且将该位置 置为 ‘#’ 进行下一步深搜(搜索上下左右的坐标点)

AC代码

#include <iostream>
#include"math.h"
#include"string.h"
#include"algorithm"
using namespace std;
int sum = 0;
char map[25][25] = {'#'};
int w,h;
int startx,starty;         void dfs(int x,int y){if(map[x][y] == '#')    return;else{map[x][y] = '#';sum++;}dfs(x+1,y);dfs(x-1,y);dfs(x,y+1);dfs(x,y-1);
}int main(int argc, char** argv) {    while(cin>>w>>h){if(w == h && w == 0)    break;memset(map,'#',625);sum = 0;for(int i = 1;i<=h;i++)for(int j = 1;j<=w;j++) {cin>>map[i][j];if(map[i][j] == '@'){startx = i;starty = j;map[i][j] = '.';}}dfs(startx,starty);cout<<sum<<endl;}return 0;
}

小结:很普通的一道dfs题目 技巧点在于讲边界初始化为 墙(‘#’)这样就不用额外做边界判断。dfs函数的要点在于将走过的路堵死(置为‘#’)

  相关解决方案