UVA------439 - Knight Moves(bfs简单)

35 篇文章 0 订阅
17 篇文章 0 订阅


伐开心,不会用bfs 网上的全都是一样的。。。。

这个程序是错误的

明明是一个简单的dfs。。。可能是我的dfs还是不好吧,等以后再改,,,

后话:老哥我懂了! 这个题是bfs,,,,我真是个傻屌,如此简单


错误程序:

#include <iostream>
#include<cstring>
using namespace std;

int dx[]={-2,-2,-1,-1,+1,+1,+2,+2};
int dy[]={+1,-1,+2,-2,+2,-2,+1,-1};
int pan[15][15];
int n;
int ru=111111111;
int vis[15][15];
int dfs(int x,int y )
{  int n=0;
   vis[x][y]=1;
   int minn=11111111;
   if(pan[x][y]==2)
        return 1 ;
    for(int i=0;i<8;i++)
    {
        int xx=x+dx[i],yy=y+dy[i];
        if(xx>=1&&xx<=8&&yy<=8&&yy>=1&&vis[xx][yy]==0)
              n+=dfs(xx,yy);
        if(n<minn)
            minn=n;

    }
    return minn;
}
int main()
{
    string s1,s2;
    while(cin>>s1>>s2)
    { n=0;
     memset(pan,0,sizeof(pan));
     int x=8-(s1[1]-'1');
     int y=s1[0]-'a'+1;
     vis[x][y]=1;
     pan[8-(s2[1]-'1')][s2[0]-'a'+1]=2;
     cout<<"To get from "<<s1<<" to "<<s2<<" takes "<<dfs(x,y)<<" knight moves."<<endl;

    }
    return 0;
}

网上前篇一律的代码

不开心,今天不想看

    #include <stdio.h>  
    #include <string.h>  
    #include <stdlib.h>  
    #include <iostream>  
    #include <algorithm>  
    #include <set>  
    #include <queue>  
    #include <stack>  
      
    using namespace std;  
    struct node  
    {  
        int x,y;  
        int step;  
    };  
    int map[110][110];  
    int vis[110][110];  
    int jx[]={2,1,1,2,-1,-2,-1,-2};  
    int jy[]={1,2,-2,-1,2,1,-2,-1};  
    char str1[20],str2[20];  
    int n,m;  
    void bfs(int xx,int yy)  
    {  
        int i;  
        struct node t,f;  
        queue<node >q;  
        t.x=xx;t.y=yy;  
        t.step=0;  
        q.push(t);  
        vis[t.x][t.y]=1;  
        while(!q.empty()){  
            t=q.front();  
            q.pop();  
            if(map[t.x][t.y]==2){  
                printf("To get from %s to %s takes %d knight moves.\n",str1,str2,t.step);  
                return ;  
            }  
            for(i=0;i<8;i++){  
                f.x=t.x+jx[i];  
                f.y=t.y+jy[i];  
                if(f.x>=0&&f.x<8&&f.y>=0&&f.y<8&&!vis[f.x][f.y]){  
                    vis[f.x][f.y]=1;  
                    f.step=t.step+1;  
                    q.push(f);  
                }  
            }  
      
        }  
    }  
    int main()  
    {  
        int s1,s2,t1,t2;  
        while(~scanf("%s %s",str1,str2))  
        {  
            memset(map,0,sizeof(map));  
            memset(vis,0,sizeof(vis));  
            s1=str1[0]-'a';  
            t1=str1[1]-'1';  
            map[s1][t1]=1;  
            s2=str2[0]-'a';  
            t2=str2[1]-'1';  
            map[s2][t2]=2;  
            bfs(s1,t1);  
        }  
        return 0;  
    }  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值