poj--1101--The Game(bfs)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 9746 | Accepted: 2967 |
Description
The game takes place on a rectangular board consisting of w * h squares. Each square might or might not contain a game piece, as shown in the picture.
One important aspect of the game is whether two game pieces can be connected by a path which satisfies the two following properties:
It consists of straight segments, each one being either horizontal or vertical.
It does not cross any other game pieces.
(It is allowed that the path leaves the board temporarily.)
Here is an example:

The game pieces at (1,3) and at (4, 4) can be connected. The game pieces at (2, 3) and (3, 4) cannot be connected; each path would cross at least one other game piece.
The part of the game you have to write now is the one testing whether two game pieces can be connected according to the rules above.
Input
of the board; each of these lines contains exactly w characters: a "X" if there is a game piece at this location, and a space if there is no game piece.
Each description is followed by several lines containing four integers x1, y1, x2, y2 each satisfying 1 <= x1,x2 <= w, 1 <= y1,y2 <= h. These are the coordinates of two game pieces. (The upper left corner has the coordinates (1, 1).) These two game pieces will
always be different. The list of pairs of game pieces for a board will be terminated by a line containing "0 0 0 0".
The entire input is terminated by a test case starting with w=h=0. This test case should not be procesed.
Output
m is the number of the pair (starting the count with 1 for each board). Follow this by "ksegments.", where k is the minimum number of segments for a path connecting the two game pieces, or "impossible.", if it is not possible to connect the two game pieces
as described above.
Output a blank line after each board.
Sample Input
5 4
XXXXX
X X
XXX X
XXX
2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0
0 0
Sample Output
Board #1:
Pair 1: 4 segments.
Pair 2: 3 segments.
Pair 3: impossible.
Source
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; /* 右左上下 */
char map[77][77];
bool vis[77][77];
int x1,y1,x2,y2,w,h;
struct Node
{
int x,y,step,dir; /* x,y代表方向,step走了几步,dir = (0初始状态,1直走,2横走)*/
};
bool operator <(const Node &a,const Node &b)
{
return a.step > b.step;
}
int bfs()
{
memset(vis,0,sizeof(vis));
queue<Node>q;
Node s,e;
s.x = x1;
s.y = y1;
s.step = 0;
s.dir = 0;
vis[s.x][s.y] = 1;
q.push(s);
while(!q.empty())
{
s = q.front();
q.pop();
for(int i=0;i<4;i++)
{
e.x = s.x + dir[i][0];
e.y = s.y + dir[i][1];
if(e.x == s.x) e.dir = 2; /* 横 */
else e.dir = 1; /* 竖 */
if(e.x>=0&&e.x<=h+1&&e.y>=0&&e.y<=w+1&&!vis[e.x][e.y])
{ if(s.dir == 0) e.step = 1;
else
{
if(s.dir == e.dir) e.step = s.step;
else e.step = s.step + 1 ;
}
if(e.x == x2&&e.y==y2) return e.step;
if(map[e.x][e.y] ==' ')
{
vis[e.x][e.y] = 1;
q.push(e);
}
}
}
}
return false;
} int main()
{
int i,j,cnt=1,Step;
while(cin>>w>>h&&(w||h))
{
memset(map,' ',sizeof(map));
for(i=1;i<=h;i++)
{
getchar();
for(j=1;j<=w;j++)
map[i][j] = getchar();
}
printf("Board #%d:\n",cnt++);
int count = 1;
while(cin>>y1>>x1>>y2>>x2)
{
if(x1+y1+x2+y2==0) break;
printf("Pair %d: ",count++);
Step = bfs();
if(!Step)
printf("impossible.\n");
else printf("%d segments.\n",Step);
}
printf("\n");
}
return 0;
}
poj--1101--The Game(bfs)的更多相关文章
- POJ 1101 The Game(BFS+判方向)
The Game Description One morning, you wake up and think: "I am such a good programmer. Why ...
- POJ 3984 迷宫问题(BFS)
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...
- POJ 2435Navigating the City(bfs)
题意:给你一个地图,’+’代表十字路口,‘-’‘|’表示街道,‘.’表示建筑物,‘s’,’E’ 起点和终点.输出从起点到终点的的 最短路径(包括方向和沿该方向的经过的十字路口数) 分析:ans[i][ ...
- poj 3669 Meteor Shower(bfs)
Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...
- 【POJ - 3414】Pots(bfs)
Pots 直接上中文 Descriptions: 给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作 FILL(i) 将第i个容器从水龙头里装满(1 ≤ i ≤ 2); DRO ...
- POJ 1573 Robot Motion(BFS)
Robot Motion Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12856 Accepted: 6240 Des ...
- POJ 3126 Prime Path (BFS)
[题目链接]click here~~ [题目大意]给你n,m各自是素数,求由n到m变化的步骤数,规定每一步仅仅能改变个十百千一位的数,且变化得到的每个数也为素数 [解题思路]和poj 3278类似.b ...
- poj 2251 Dungeon Master(bfs)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- POJ 3221 Diamond Puzzle(BFS)
Description A diamond puzzle is played on a tessellated hexagon like the one shown in Figure 1 below ...
- 题解报告:poj 3669 Meteor Shower(bfs)
Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...
随机推荐
- SQl基本操作——try catch
begin try ... end try begin catch ... end catch
- 【译】x86程序员手册09-第3章程序指令集
注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...
- 【实战】用request爬取拉勾网职位信息
from urllib import request import urllib import ssl import json url = 'https://www.lagou.com/jobs/po ...
- Spring Boot 集成 JWT 实现单点登录授权
使用步骤如下:1. 添加Gradle依赖: dependencies { implementation 'com.auth0:java-jwt:3.3.0' implementation('org.s ...
- LNMP动态网站架构及web应用部署,搭建discuz论坛
1)部署Nginx 实验tar安装包可找本人拿记得点+关注,感谢亲们支持,评论拿包 systemctl stop firewalld iptables -F setenforce 0 1)安装支持软件 ...
- 44.bucket filter:统计各品牌最近一个月的平均价格
课程大纲 GET /tvs/sales/_search { "size": 0, "query": { "term": { &quo ...
- windows和linux下 Python2,Python3 的环境及安装
目录 windows和linux下 Python2,Python3 的环境及安装 window下安装 一. 手动安装 二. pip安装 linux下 安装 更新Python 笔者有话 windows和 ...
- hdu 4941 stl的map<node,int>用法
#include<iostream> #include<cstdio> #include<cstring> #include<map> using na ...
- BZOJ1443 游戏game (二分图染色+匈牙利算法)
先对整幅图进行二分图染色,再跑一遍匈牙利算法.如果最大匹配数=点数*2,那么输出WIN. 对于任何一个非必须在最大匹配上的点,即为所求的点. Program Test375num2; type arr ...
- SecureCRT的设置和美化
一 . SecureCRT 7.1 的 安装 http://liufei888.blog.51cto.com/2625545/1306231 1.下载注册机SecureCRT.v.6.7. ...