zoukankan      html  css  js  c++  java
  • poj1915--Knight Moves(DFS)

    在正方形的矩阵中,可以向8个方向移动,给出起点和终点,求出最快到达终点的步数。

    #include<stdio.h>
    #include<string.h>
    typedef struct{
        int x;
        int y;
        int step;
    }point;
    typedef struct{
        point a[90000];
        int rear;
        int front;
    }queue;
    int vis[401][401]={0};
    queue q;
    int m,n,t,l;
    int next[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};   //8种方向
    int bfs(int x,int y,int c){
        q.rear=q.front=0;
        q.a[q.rear].x=x;
        q.a[q.rear].y=y;
        q.a[q.rear].step=0;
        q.rear++;                                                               //开始进队
        while(q.front<q.rear){
            point temp=q.a[q.front++];                         //出队
            if(temp.x==m&&temp.y==n) return temp.step;
            for(int i=0;i<8;i++){
                if(temp.x+next[i][0]>=0&&temp.x+next[i][0]<c&&temp.y+next[i][1]>=0&&temp.y+next[i][1]<c&&vis[temp.x+next[i][0]][temp.y+next[i][1]]==0){ //防止越界,并将已经走过的点忽略
                    point ttemp;                     //存放下一步的点
                    ttemp.x=temp.x+next[i][0];
                    ttemp.y=temp.y+next[i][1];
                    ttemp.step=temp.step+1;       //下一步进队
                    q.a[q.rear++]=ttemp;
                    vis[ttemp.x][ttemp.y]=1;
                    if(ttemp.x==m&&ttemp.y==n)
                        return ttemp.step;
                }    
            }
        }
    }
    int main(){
        scanf("%d",&t);
        while(t--){
            int time;
            memset(vis,0,sizeof(vis));
            scanf("%d",&l);
            int q,s;
            scanf("%d%d",&q,&s);
            scanf("%d%d",&m,&n);
            time=bfs(q,s,l);
            printf("%d
    ",time);
    
        }
    }
  • 相关阅读:
    Docker之路-docker架构
    Docker之路-认识docker
    Docker之路-版本选择及安装
    Golang理解-集合
    大话算法-动态规划算法
    运维职责
    Golang理解-匿名结构体
    DotNetty项目基本了解和介绍
    变量声明在循环体内还是循环体外的争论
    SqlServer与MySql语法比较
  • 原文地址:https://www.cnblogs.com/lvcoding/p/6599408.html
Copyright © 2011-2022 走看看