ZWK so lazy

来源:互联网 发布:淘宝摄影需要什么器材 编辑:程序博客网 时间:2024/05/29 17:39
Description:

ZWK很懒每次从某个点到哪个点都会去计算下步数,想知道最短需要多少步,简单的来说就是在一个N*M的矩阵,用‘S’表示起始点,‘E’表示终点,’.‘表示可以走的路,'#'表示障碍,求S到E的最短步数,EOF表示结束

Input:

第一行输入n,m

然后输入N*M矩阵

Output:

输出最短的步数

Sample Input:
3 3S.......E
Sample Output:
4
// ZWK SO LAZY.cpp : 定义控制台应用程序的入口点。//#include<stdlib.h>#include<math.h>#include<stdio.h>#define N 105#define min(x,y) (x<y?x:y)char map[N][N];int vis[N][N];int n,m,minz=999999;int step[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int check(int x,int y){if((x>=0&&x<n)&&(y>=0&&y<m))return 1;return 0;}int DFS(int x,int y,int dp){int i,j;if(map[x][y]=='E'){minz=min(minz,dp);return 1;}for(i=0;i<4;i++){int tmpx,tmpy;tmpx=x+step[i][0];tmpy=y+step[i][1];if(map[tmpx][tmpy]=='#')continue;if(check(x,y)==1&&vis[tmpx][tmpy]==0){vis[tmpx][tmpy]=1;DFS(tmpx,tmpy,dp+1);vis[tmpx][tmpy]=0;}}return 0;}int main(){int x,y,i,j;while(scanf("%d%d",&n,&m)!=EOF){x=y=minz=999999;for(i=0;i<n;i++)scanf("%s",map[i]);for(i=0;i<n;i++)for(j=0;j<m;j++)vis[i][j]=0;for(i=0;i<n;i++){if(x!=minz&&y!=minz)break;for(j=0;j<m;j++){if(map[i][j]=='S'){x=i,y=j;break;}}}DFS(x,y,0);if(minz==999999)printf("%d\n",0);elseprintf("%d\n",minz);}return 0;}


0 0
原创粉丝点击