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;
}

 

posted @ 2019-03-11 20:39  octal_zhihao  阅读(325)  评论(0编辑  收藏  举报