基础题: 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 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-1&&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; } }