1 条题解
-
0
C :
#include<stdio.h> #include<string.h> #define min(x,y) x>y?y:x int a,b,c,d,p; char map[103][103]; void dfs(int x,int y,int s) { if(map[x][y]=='#')return ; if(x==c && y==d ){p=min(s,p);return ;} s++; map[x][y]='#'; dfs(x+1,y,s); dfs(x,y+1,s); dfs(x-1,y,s); dfs(x,y-1,s); map[x][y]='-'; } int main() { // freopen("sousuo.txt","w",stdout); int T,n,m,i,j; scanf("%d",&T); while(T--) { memset(map,'#',sizeof(map)); scanf("%d%d",&n,&m); for(i=1;i<=n;++i) { getchar(); for(j=1;j<=m;++j) { map[i][j]=getchar(); if(map[i][j]=='S'){a=i;b=j;} if(map[i][j]=='E'){c=i;d=j;} } } p=11000; dfs(a,b,0); printf("%d\n",p); } return 0; }
C++ :
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define min(x,y) x<y?x:y; bool flag; int x1,y1,x2,y2,a,b,m; char map[103][103]; void dfs(int i,int j,int cnt) { if(map[i][j]=='#') return ; if(i==x2&&j==y2) { m=min(cnt,m); flag= false; return ; } if(i>=1&&i<=a&&j>=1&&j<=b&&map[i][j]!='#') { cnt++; map[i][j]='#'; dfs(i,j-1,cnt); dfs(i-1,j,cnt); dfs(i,j+1,cnt); dfs(i+1,j,cnt); map[i][j]='-'; } } int main() { int T,i,j; cin>>T; while(T--) { m = 100000;flag = true; scanf("%d%d",&a,&b); for(i = 1 ; i <= a; i++) { for(j = 1 ; j <= b; j++) { cin>>map[i][j]; if(map[i][j]=='S') x1=i,y1=j; if(map[i][j]=='E') { x2=i,y2=j; } } } dfs(x1,y1,0); if(!flag) printf("%d\n",m); else printf("-1\n"); } return 0; }
- 1
信息
- ID
- 1506
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者