OpenJudge 2727:仙岛求药
代码稍微有点丑^_^
懒得做注解^_^
不过应该不难理解
#include<bits/stdc++.h> using namespace std; int dx[10]={0,1,-1,0,0}; int dy[10]={0,0,0,1,-1}; int m,n,i,j; int a[50][50],ans,xx[50][50],f[50][50]; bool biao=false; void dfs(int x,int y,int sum) { if(sum>=f[x][y]) return; f[x][y]=sum; if(a[x][y]==0) return; if(ans!=0&&sum>=ans) return; if(a[x][y]==2) { ans=sum; biao=false; return; } for(int i=1;i<=4;i++) { int nx=x+dx[i],ny=y+dy[i]; if(xx[nx][ny]==0) { xx[nx][ny]=1; dfs(nx,ny,sum+1); xx[nx][ny]=0; } } } int main() { while(cin>>n>>m) { if(m==0&&n==0) break; char c; int st,ed; memset(a,0,sizeof(a)); memset(xx,0,sizeof(xx)); memset(f,0x7f,sizeof(f)); biao=false;ans=0; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { cin>>c; if(c=='@') { a[i][j]=1; st=i; ed=j; } if(c=='.') a[i][j]=1; if(c=='*') a[i][j]=2,biao=true; } if(biao==false) { cout<<-1<<endl; break; } dfs(st,ed,1); if(biao) cout<<-1<<endl; else cout<<ans-1<<endl; } return 0; }