1 条题解
-
0
C :
#include<stdio.h> const int x0[]={0,1,0,-1},y0[]={1,0,-1,0}; int n,m,cnt,x[10000],y[10000],t[10000]; char c[110][110]; int b[110][110]; int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%s",c[i]); int head=0,tail=1; x[1]=t[1]=1;y[1]=0; b[1][0]=1; while(head!=tail) { head++; for(int i=0;i<4;i++) { int x1=x[head]+x0[i],y1=y[head]+y0[i]; if(x1>0&&x1<=n&&y1>=0&&y1<m&&c[x1][y1]=='.'&&!b[x1][y1]) { tail++;b[x1][y1]=1; x[tail]=x1;y[tail]=y1;t[tail]=t[head]+1; if(x1==n&&y1==m-1) { printf("%d",t[tail]); return 0; } } } } }
C++ :
#include <bits/stdc++.h> using namespace std; char a[150][150]; //存储到达每个点最少需要多少步 int d[150][150]; int m,n; //递归求步数 void fun(int dep,int i,int j){ if(dep < d[i][j]){ d[i][j] = dep; if(a[i-1][j] == '.') fun(dep+1,i-1,j); if(a[i+1][j] == '.') fun(dep+1,i+1,j); if(a[i][j-1] == '.') fun(dep+1,i,j-1); if(a[i][j+1] == '.') fun(dep+1,i,j+1); } } int main(){ int i,j; cin>>n>>m; //.表示能走,#表示不能走 for(i = 1;i <= n;i++){ for(j = 1;j <= m;j++){ cin>>a[i][j]; d[i][j] = INT_MAX; } } fun(1,1,1); cout<<d[n][m]<<endl; }
- 1
信息
- ID
- 2352
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 13
- 已通过
- 0
- 上传者