OpenJ_Bailian

来源:互联网 发布:人工智能带来的便利 编辑:程序博客网 时间:2024/06/09 19:27

题目描述
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。

Input
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用’.’表示,有障碍物的格子用’#’表示。
迷宫左上角和右下角都是’.’。
Output
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
Sample Input

5 5..####....#.#.##.#.##.#..

Sample Output
9

思路:dfs模板题,直接套用模板。

#include<bits/stdc++.h>using namespace std;char a[101][101];int vis[101][101];int to[4][2]={1,0,-1,0,0,1,0,-1};int k,n,t,sx,sy,ex,ey,mi=999999;void dfs(int i,int j,int g){    if(i>=n||j>=n||i<0||j<0||vis[i][j]||a[i][j]=='#')        return;    if(i==ex&&j==ey)    {        if(g<mi)        mi=g;        return;    }    vis[i][j]=1;    for(int p=0;p<4;p++)        dfs(i+to[p][0],j+to[p][1],g+1);}int main(){    scanf("%d%d",&k,&n);    for(int i=0;i<n;i++)    scanf("%s",a[i]);    ex=k-1;    ey=n-1;    dfs(0,0,1);    printf("%d\n",mi); }
原创粉丝点击