首页 > 其他分享 >POJ 2935 Basic Wall Maze BFS

POJ 2935 Basic Wall Maze BFS

时间:2023-09-15 10:38:17浏览次数:39  
标签:yy pp Wall 2935 visit BFS int xx dir


注意墙的处理,我是这么做的,把每个方块不能行走的方向标记出来,剩他的就是传统BFS了。

#include<stdio.h>
#include<queue>
using namespace std;
int sx,sy,ex,ey;
int h[4]={1,-1,0,0};
int g[4]={0,0,1,-1};
int dir[8][8][5];
bool visit[7][7];
struct point{
	int x;
	int y;
	int time;
	int pre;
	char dir;
}que[1000];
void limdir(int a,int b,int c,int d){
	int i;
	if(a==c){
		for(i=b+1;i<=d;i++){
			dir[c][i][0]=1;
			dir[c+1][i][1]=1;
		}
	}
	else if(b==d){
		for(i=a+1;i<=c;i++){
			dir[i][b][2]=1;
			dir[i][b+1][3]=1;
		}
	}
}
char cal(int i){
	if(i==0)
		return 'S';
	else if(i==1)
		return 'N';
	else if(i==2)
		return 'E';
	else
		return 'W';
}
void print(int tem){
	if(que[tem].pre!=-1){
		print(que[tem].pre);
		printf("%c",que[tem].dir);
	}
}
int bfs(){
	int front=0,rear=0,xx,yy,i,j,k;
	struct point cur;
	cur.x=sx;
	cur.y=sy;
	cur.time=0;
	cur.pre=-1;
	que[rear++]=cur;

	while(front<rear){
		struct point tem;
		tem=que[front];

		for(i=0;i<4;i++){
			xx=tem.x+h[i];
			yy=tem.y+g[i];

			if(xx<=0 || xx>6 || yy<=0 || yy>6)
				continue;
			if(dir[tem.x][tem.y][i])
				continue;
			if(visit[xx][yy])
				continue;

			struct point pp;
			pp.x=xx;pp.y=yy;pp.time=tem.time+1;
			pp.pre=front;pp.dir=cal(i);
			que[rear]=pp;
			visit[xx][yy]=1;
			if(xx==ex && yy==ey){
				print(rear);
				printf("\n");
				return 1;
			}
			rear++;
		}
		front++;
	}
	return 0;
}

int main(){
	int i,j,k,a,b,c,d;
	while(scanf("%d %d",&sy,&sx) && !(sx==0 && sy==0)){
		scanf("%d %d",&ey,&ex);
		memset(dir,0,sizeof(dir));
		memset(visit,0,sizeof(visit));
		for(i=1;i<=3;i++){
			scanf("%d %d %d %d",&b,&a,&d,&c);
			limdir(a,b,c,d);
		}
		visit[sx][sy]=1;
		bfs();
	}
}

 

 

标签:yy,pp,Wall,2935,visit,BFS,int,xx,dir
From: https://blog.51cto.com/u_16263395/7477987

相关文章

  • Linux防火墙:Firewalld 常用命令
    Linux防火墙:Firewalld常用命令CentOS和Fedora中默认的防火墙是Firewalld查看防火墙状态firewall-cmd--state启动防火墙systemctlstartfirewalld重启防火墙systemctlrestartfirewalld暂时关闭防火墙systemctlstopfirewalld永久关闭防火墙system......
  • RBFS简单理解
    论文引用Sharma,DishaandSanjayKumarDubey.“ComparativeStudyofRBFS&ARBFSAlgorithm.”IOSRJournalofComputerEngineering10(2013):105-110.前言论文中的伪代码可能有错误贴一份写的比较清楚点的帖子算法思路在h函数保证一致性的情况下,第一次扩展到n时......
  • 【Linux】firewalld防火墙基本操作指令
    1,firewall-cmd--list-all   查询全部已开放端口 2,firewall-cmd--zone=public--add-port=8888/tcp--permanent    开放端口3,firewall-cmd--zone=public--remove-port=8888/tcp--permanent   关闭端口 4,firewall-cmd--reload   重启防......
  • 2013_q2bfsm
    moduletop_module(inputclk,inputresetn,//active-lowsynchronousresetinputx,inputy,outputf,outputg);parameterA=0,B=1,C=2,D=3,E=4,F=5,G=6,H=7,ON=14,OFF=15;reg[3:0]state,nst......
  • poj 1113 Wall-----凸包
    凸包问题。先按x坐标排序,x一样的按y排序。取p【0】为开始点,每个点与开始点相连,按x轴正方向,每条线段与x轴的夹角由小到大排序。然后选点求距离。。。本题求凸包的边长+以L为半径的园的周长。//自己的凸包模板#include<stdio.h>#include<string.h>#include<math.h>#include<a......
  • hdu 1372 Knight Moves 骑士的移动 bfs--马走日
    #include<stdio.h>#include<string.h>#include<queue>usingnamespacestd;charss[3],ee[3];intx1,y1,x2,y2;structpos{intx,y,step;}sta,end;intf[10][10];intdir[8][2]={1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,1,-2,-1};boolfan......
  • linux(centos7)安装防火墙firewalld及开放端口相关命令
    安装firewalld防火墙命令:yuminstallfirewalld  安装完成,查看防火墙状态为notrunning,即未运行,输入命令开启:  添加开放端口:   防火墙相关命令: 查看防火墙状态systemctlstatusfirewalld.service 打开防火墙systemctlstartfirewalld.service 关闭......
  • linux firewall 常用命令
    #1.启动防火墙systemctlstartfirewalld#2.关闭防火墙systemctlstopfirewalld#3.查看防火墙状态systemctlstatusfirewalld#4.开机自动禁用systemctldisablefirewalld#5.开机自动启动systemctlenablefirewalld#6.开放80/tcp端口(--permanent永......
  • FirewallD is not running 原因与解决方法
    解决方法关于linux系统防火墙:centos5、centos6、redhat6系统自带的是iptables防火墙。centos7、redhat7自带firewall防火墙。ubuntu系统使用的是ufw防火墙。防火墙导致服务不正常的问题:在服务器安装某些服务之后,服务无法连接、无法正常启动等情况。查看下系统防火墙有没开放相关......
  • 邻接矩阵的BFS
    intArrNum(GraphG,intver){for(inti=0;i<G.VerNum;i++)if(G.Ver[i]==ver)returni;elsereturn-1;}intFirstNeighbor(GraphG,intver){intx=ArrNum(G,ver);for(inti=0;i<G.VerNum;i++){......