poj3984广搜c语言
2015-08-17 00:22
381 查看
#include <stdio.h>//输入5*5迷宫,输出路径 #define MAX_ROW 5 #define MAX_COL 5 struct point { int row, col, predecessor; } queue[512],p; struct node{int x,y;}arr[50]; int head = 0, tail = 0; void enqueue(struct point p) { queue[tail++] = p; } struct point dequeue(void) { return queue[head++]; } int is_empty(void) { return head == tail; } int maze[MAX_ROW][MAX_COL]; void visit(int row, int col) { struct point visit_point = { row, col, head-1 }; maze[row][col] = 2; enqueue(visit_point); } int main(void) { int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&maze[i][j]); struct point p={0,0,-1}; maze[p.row][p.col] = 2; enqueue(p); while (!is_empty()) { p = dequeue(); if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) break; if (p.col+1 < MAX_COL && maze[p.row][p.col+1] == 0) visit(p.row, p.col+1); if (p.row+1 < MAX_ROW && maze[p.row+1][p.col] == 0) visit(p.row+1, p.col); if (p.col-1 >= 0 && maze[p.row][p.col-1] == 0) visit(p.row, p.col-1); if (p.row-1 >= 0 && maze[p.row-1][p.col] == 0) visit(p.row-1, p.col); } i=1; arr[0].x=p.row, arr[0].y=p.col; while (p.predecessor != -1) { p = queue[p.predecessor]; arr[i].x=p.row, arr[i].y=p.col; i++; } j=i; for(i=j-1;i>=0;i--) printf("(%d,%d)\n",arr[i].x,arr[i].y); return 0; }
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- C语言进制转换代码分享
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- Lua教程(四):在Lua中调用C语言、C++的函数