Poj 1101 The Game(广搜,优先级:优先队列或者其他)

来源:互联网 发布:淘宝点击量和访客数 编辑:程序博客网 时间:2024/04/26 17:00
/*************************************************************************


The Game
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 8586 Accepted: 2613
Description


One morning, you wake up and think: "I am such a good programmer. Why not make some money?'' So you decide to write a computer game. 
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


The input contains descriptions of several different game situations. The first line of each description contains two integers w and h (1 <= w,h <= 75), the width and the height of the board. The next h lines describe the contents 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


For each board, output the line "Board #n:", where n is the number of the board. Then, output one line for each pair of game pieces associated with the board description. Each of these lines has to start with "Pair m: ", where 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


Mid-Central European Regional Contest 1999





官方测试数据:
5 4
XXXXX
X   X
XXX X
 XXX 
2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0
4 4
XXXX
XXXX
XXXX
XXXX
1 1 2 1
2 2 3 2
1 1 3 1
3 4 4 3
2 1 2 4
1 1 2 2
0 0 0 0
20 10
XXXXXXXXXXXXXXXXXXXX
XX         XXX   XXX
XX XXXXXXXXXX  X  XX
XX  XXXXXXXX  XXX  X
XXX XXXXXXX  XX XX X
XX  XXXXXX  XXX X  X
XX XXXXXX  X    X XX
XX X   X  XX XXXX  X
XX   X   XXX       X
XXXXXXXXXXXXXXXXXXXX
11 1 13 10
11 1 15 5
0 0 0 0
2 1
XX
1 1 2 1
0 0 0 0
1 3
X
X
X
1 1 1 2
1 1 1 3
1 2 1 3
0 0 0 0
7 6
XXXXXXX
X     X
X   X X
X X   X
X     X
XXXXXXX
1 3 7 4
1 4 7 3
1 3 3 1
1 3 4 1
1 3 5 1
1 5 7 5
3 4 5 3
0 0 0 0
75 75
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX                                                                         
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X                                                                         X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX              XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XX XX XXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XXXXX XXX XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XX XX XXX      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XX XX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX XX XXX XXX     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX    XXXX XX   XXX   XXXXX   XXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX     XXXXXX XXX X XXX X XXX XXX XXX XXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXXXXX XXX    XXX  XXXXX XXXX XXX     XXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XXXX   XX XXX XXX XXXXXX XXXX XXX XXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      X XXX   X XX XXXXXX XXXX XXXX    XXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX  XX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX                                                                         
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1 2 1 74
2 2 2 74
1 2 2 74
2 2 1 74
13 67 29 8
1 4 75 4
1 4 31 49
3 73 24 56
3 3 3 73
3 3 24 56
1 74 2 74
6 71 7 71
6 71 7 72
0 0 0 0
10 10
          
      X   
          
          
          
         X
          
          
          
          
7 2 10 6
10 6 7 2
7 2 10 6
0 0 0 0
75 18
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                                                                          X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X                                                                       X X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X
X X                                                                   X X X
X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X X
X X X                                                               X X X X
X X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X X X
X X X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X X X X
X X X XXX   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X X X
X X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X X
X X X                                                                 X X X
X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X
X X                                                                     X X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X                                                                         X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
75 18 8 11
0 0 0 0
75 73
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X X
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X
X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
74 72 75 73
0 0 0 0
0 0


 ************************************************************************/
 
  /*************************************************************************
解题分析:
* 1、比较好的做法实在格子最外围加上一层,便于访问; 其次,最好将目标先置空,后还原
* 2、控制优先级:可用优先队列,也可不用(while可控制一直往同一方向)
* 3、tmp = x*(w+2)+y; //将二维变为以为存储,这是一个技巧
* 4、dis[nx][ny] = dis[x][y] + 1;//记录前一段的段数,

 ************************************************************************/

代码: 

#include <stdio.h>#include <queue>#include <string.h>#include<iostream>#define MAXL 80using namespace std;int w, h, visited[MAXL][MAXL], dis[MAXL][MAXL];int dir[][4] = {{0,1,-1,0}, {1,0,0,-1}};//右,下,上,左char a[MAXL][MAXL];int x1, x2, y1, y2;void bfs(int x, int y) {    int tmp = x*(w+2)+y, i; //将二维变为以为存储    queue <int> q;    q.push(tmp);    visited[x][y] = 1;//标记访问    while(!q.empty()) {        tmp = q.front();         x = tmp/(w+2); //        y = tmp%(w+2); //解析        if(x==x2 && y==y2)            return ;        q.pop();        for(i=0; i<4; i++) {            int nx = x + dir[0][i];            int ny = y + dir[1][i];            //用while优先同一方向,比优先队列快            while(nx>=0&&nx<=h+1&&ny>=0&&ny<=w+1&&!visited[nx][ny]&&a[nx][ny]==' ') {                tmp = nx * (w+2)+ny;                visited[nx][ny] = 1;//                //记录前一段的段数                dis[nx][ny] = dis[x][y] + 1;                q.push(tmp);                nx += dir[0][i];                ny += dir[1][i];            }        }    }}int main(void) {    int i, j, Board=1;    while(scanf("%d%d", &w, &h) && w && h) {        //全部置空        for(i=0; i<MAXL; i++) {            for(j=0; j<MAXL; j++)                a[i][j] = ' ';        }                //留出外围        for(i=1; i<=h; i++) {            getchar();            for(j=1; j<=w; j++)                scanf("%c", &a[i][j]);        }        printf("Board #%d:\n", Board++);        int Pair = 1;        while(scanf("%d%d%d%d", &y1, &x1, &y2, &x2) && x1 && y1 && x2 && y2) {            getchar();            memset(visited, 0, sizeof(visited));            memset(dis, 0, sizeof(dis));            a[x2][y2] = ' '; //x2行 y2列 , 置空,方便查找            bfs(x1, y1);            if(!dis[x2][y2])                printf("Pair %d: impossible.\n", Pair++);            else                printf("Pair %d: %d segments.\n", Pair++, dis[x2][y2]);            a[x2][y2] = 'X'; //还原        }        printf("\n");    }    return 0;}


原创粉丝点击