zoukankan      html  css  js  c++  java
  • 搜索1015

    题目大意:

    给出起点和终点坐标,求出最短步数,每次走一个“日”字

    解题思路:

    bfs

    代码:

    #include<iostream>
    #include<string>
    #include<queue>
    using namespace std;
    int vis[20][20];
    string s1,s2;
    struct ans
    {
        int x;
        int y;
        int ste;
    }n1,n2;
    int dix[10]={-2,-2,-1,-1,1,1,2,2};
    int diy[10]={-1,1,-2,2,-2,2,-1,1};
    int ww(int a,int b)
    {
        if(a>0&&a<=8&&b>0&&b<=8) return 1;
        return 0;
    }
    int BFS( )
    {
        n1.ste=0;
        queue<ans> Q;
        Q.push(n1);
        while(!Q.empty())
        {
            n1=Q.front();
            Q.pop();
            if(n1.x==s2[1]-'0'&&n1.y==s2[0]-'a'+1) return n1.ste;
            for(int i=0;i<8;i++)
            {
                n2.x=n1.x+dix[i];
                n2.y=n1.y+diy[i];
                if(ww(n2.x,n2.y)&&!vis[n2.x][n2.y])
                {
                    vis[n2.x][n2.y]=1;
                    n2.ste=n1.ste+1;
                    Q.push(n2);
                }
            }
        }
        return -1;
    }
    
    int main()
    {
        //freopen("a.txt","r",stdin);
        while(cin>>s1>>s2)
        {
            int i,j;
            n1.x=s1[1]-'0';
            n1.y=s1[0]-'a'+1;
            for(i=0;i<20;i++)
                for(j=0;j<20;j++)
                 vis[i][j]=0;
            vis[n1.x][n1.y]=1;
            int t=BFS();
                cout<<"To get from "<<s1<<" to "<<s2<<" takes "<<t<<" knight moves."<<endl;
        }
        return 0;
    }
  • 相关阅读:
    个人项目实战
    准备
    结队项目-第一次作业
    第三次作业--团队展示
    软件工程实践第二次作业
    软件工程实践第一次作业
    circle
    calculator
    视频课程学习及学习计划
    1001.A+B Format (20)
  • 原文地址:https://www.cnblogs.com/Sikaozhe/p/5422659.html
Copyright © 2011-2022 走看看