POJ_3984 미궁 문제 (광 수)

2164 단어 수색 하 다.
제목:http://poj.org/problem?id=3984
제목 대의: 5 * 5 의 미 로 를 드 리 겠 습 니 다. 왼쪽 상단 에서 오른쪽 하단 까지 최 단 경 로 를 구하 고 경 로 를 출력 하 겠 습 니 다.
원본 코드:
/**********************************
**********      ************
***********************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;
#define N 5
int maze[N][N];//maze         
int visited[N][N];//flag           
int dir[4][2] = { 0,1,1,0,0,-1,-1,0};
struct pos{
    int x;
    int y;
    int pre;
}que[100];//          

void print( int head)
{
    if( que[head].pre != -1)
    {
        print(que[head].pre);
        printf("(%d, %d)
",que[head].x,que[head].y); } } void bfs( int x, int y) { int head = 0;// int tail = 0;// // x、y que[head].x = x; que[head].y = y; que[head].pre = -1; visited[x][y] = 1; // ++ tail++; int tx; int ty; while( head < tail) { for( int i = 0; i < 4; i++) { tx = que[head].x+dir[i][0];// ty = que[head].y+dir[i][1]; // if( tx < 0 || tx > N-1 || ty < 0 || ty > N-1) continue; // if( maze[tx][ty] == 0 && visited[tx][ty] == 0) { visited[tx][ty] = 1;// que[tail].x = tx;// tx、ty que[tail].y = ty; que[tail].pre = head;// head tail++; } if( tx == 4 && ty == 4) { print(head); return; } } head++;// head } } int main() { memset(visited,0,sizeof(visited));// for( int i = 0; i < N; i++) for( int j = 0; j < N; j++) scanf("%d",&maze[i][j]); printf("(0, 0)
"); bfs(0,0); printf("(4, 4)
"); return 0; }

좋은 웹페이지 즐겨찾기