• poj1915 Knight Moves


    题目:

    在n*n的格板上,求马从一个格子移动到特定位置的最小步数。


    思路:

    双向BFS (轻松搞掉,一遍AC)

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    const int N=300;
     struct ss
    {
    	int x,y,t;
    };
    int n,T,f[N+5][N+5],ans[N+5][N+5];
    ss st,en,q1[N*N+5],q2[N*N+5];
    int d[8][2]={{1,2},{2,1},{-1,2},{2,-1},{-2,1},{1,-2},{-1,-2},{-2,-1}};
    
     void bfs()
    {
    	ss res,tmp;
    	int l=0,r=1,ll=0,rr=1;
    	q1[1]=st; q2[1]=en;
    	while (l<r)
    	{
    		l++; res=q1[l];
    		if (res.x==en.x&&res.y==en.y)
    		{
    			printf("%d
    ",res.t); return;
    		}
    		for (int i=0; i<8; i++)
    		{
    			tmp.x=res.x+d[i][0]; tmp.y=res.y+d[i][1]; tmp.t=res.t+1;
    			if (tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<n)
    				if (!f[tmp.x][tmp.y])
    				{
    					f[tmp.x][tmp.y]=1;
    					ans[tmp.x][tmp.y]=tmp.t;
    					r++; q1[r]=tmp;
    				}
    				else if (f[tmp.x][tmp.y]==2)
    				{
    					printf("%d
    ",ans[tmp.x][tmp.y]+tmp.t);
    					return;
    				}
    		}
    		ll++; res=q2[ll];
    		for (int i=0; i<8; i++)
    		{
    			tmp.x=res.x+d[i][0]; tmp.y=res.y+d[i][1]; tmp.t=res.t+1;
    			if (tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<n)
    				if (!f[tmp.x][tmp.y])
    				{
    					f[tmp.x][tmp.y]=2;
    					ans[tmp.x][tmp.y]=tmp.t;
    					rr++; q2[rr]=tmp;
    				}
    				else if (f[tmp.x][tmp.y]==1)
    				{
    					printf("%d
    ",ans[tmp.x][tmp.y]+tmp.t);
    					return;
    				}
    		}
    	}
    }
    
     int main()
    {
    	scanf("%d",&T);
    	while (T--)
    	{
    		memset(f,0,sizeof(f));
    		memset(ans,0,sizeof(ans));
    		scanf("%d",&n);
    		scanf("%d%d%d%d",&st.x,&st.y,&en.x,&en.y);
    		st.t=en.t=0;
    		f[st.x][st.y]=1; f[en.x][en.y]=2;
    		bfs();
    	}
    	return 0;
    }
    
  • 相关阅读:
    CentOS 8.0配置阿里云yum源和epel源
    CentOS8 安装epel 使用阿里云镜像
    centos下yum使用proxy代理方法
    MySQL中的事务控制(一)start transaction
    MySQL中的锁定语句: lock tables 和 unlock tables
    MySQL中的触发器
    MySQL中的事件调度器
    MySQL中的流程控制
    MySQL中的不可见索引、倒序索引
    IDEA出现Push to origin/master was rejected
  • 原文地址:https://www.cnblogs.com/lyxzhz/p/11409311.html
Copyright © 2020-2023  润新知