深度优先搜索算法

来源:互联网 发布:excel数据导入表格 编辑:程序博客网 时间:2024/06/05 03:25

基础题:
input:
n m

下面是n行m列的矩阵,由’ . ‘和’ X ‘组成,求由(1,1)到(n,m)的最短路径

#include<iostream>using namespace std;#define M 100#define INF 10000000// 定义四个方向,来寻找最短路径int dir[4][2] = {0,1,                 0,-1,                 1,0,                 -1,0};char map[M][M];int ans,step=0,a=0;int n,m;// suppose '.'means can walk//          'X'means cannot walk// 判断x,y和map[x][y]bool judge(int x, int y){    if(x>=0 && x<n && y>=0 && y<n && map[x][y]=='.')        return 1;     return 0;}void dfs(int x, int y, int step) // cal the min step{    if(x==n && y==m-1)    {        if(step < ans)            ans = step;    }    // 每次循环都从四个方向上来寻找最短路径    for(int i=0; i<4; i++)    {        int tx = x+dir[i][0];        int ty = y+dir[i][1];        if(judge(tx,ty))        {            step++;            map[tx][ty]='x';            dfs(tx,ty,step);            step--;            map[tx][ty]='.';        }    }}int main(){    while(cin>>n>>m&&m&&n)    {        ans = INF;        step = 0;        a = 0;        for(int i=0; i<n; i++)        {            getchar();            for(int j=0; j<m; j++)            {                scanf("%c", &map[i][j]);                if(map[i][j]=='.')                    a++;            }        }        dfs(0,0,0);        if(ans!=INF)            cout << ans << endl;        else            cout << "Cannot achieve" << endl;    }}
0 0
原创粉丝点击