Serendipity丶


私信TA

用户名:uq_38590416266

访问量:2433

签 名:

别人的屋檐再大,不如自己手中有伞

等  级
排  名 64
经  验 10627
参赛次数 0
文章发表 33
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

唯有提高自己的核心竞争能力,才可在逆流中不断前进。

解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>

using namespace std;

int m,n,maxx=99999;

char a[100][100];

int b[100][100];

int dx[4]={1,-1,0,0};

int dy[4]={0,0,1,-1};

int dfs(int x,int y,int dep)

{

b[x][y]=dep;//新位置存放的数 

for(int i=0;i<4;i++)

{

int tx=x+dx[i],ty=y+dy[i];

if(tx<0||ty<0||tx>=m||ty>=n) continue;//防止出去棋盘位置 

if(a[tx][ty]=='.'&&dep+1<b[tx][ty])//'.' 可走 dep+1这个则为如果该位置+1走到新位置小于新位置的数则进行替换 

dfs(tx,ty,dep+1);//                 自己模拟一遍能理解 

}

}

int main()

{

cin>>m>>n;

for(int i=0;i<m;i++)

for(int j=0;j<n;j++)

{

cin>>a[i][j];

    b[i][j]=99999;//求最小 每一个定义为很大就行 求最大就定义为0 

}


dfs(0,0,1);//从第一个开始 

cout<<b[m-1][n-1];//m-1 n-1 不用多讲 

return 0;

}


 

0.0分

2 人评分

  评论区

  • «
  • »