队列实现迷宫问题
来源:互联网 发布:nginx在windows配置 编辑:程序博客网 时间:2024/06/05 10:00
#include<stdio.h>#include<stdlib.h>int head=0,tail=0;//定义队列头和尾int maze[50][50];//定义迷宫int flag;//定义标志//打印路线//以maze各点的数转换为图形void result_maze(int m,int n){int i,j;printf("迷宫通路(用☆表示)如下所示:\n\t");for(i=0;i<m;i++){ printf("\n");for(j=0;j<n;j++){ if(maze[i][j]==0||maze[i][j]==2) printf("□"); if(maze[i][j]==1) printf("■"); if(maze[i][j]==3) printf("☆");}}printf("\n");}//手动生成迷宫void shoudong_maze(int m,int n){int i,j;printf("请输入0和1\n");for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&maze[i][j]);}//用结构体模拟队列//因为要打印,所以选择用数组和head,tail的偏移而不是指针分配和销毁来模拟struct point{int row,col,predecessor;//predecessor用于记录路径}queue[512];//入队操作void enqueue(struct point p){queue[tail]=p;tail++;}//出队操作struct point dequeue(){head++;return queue[head-1];}//判断是否为空int isempty(){return head==tail;}//遍历操作void visit(int row,int col,int maze[50][50]){struct point visitpoint={row,col,head-1};maze[row][col]=2;enqueue(visitpoint);}int mainfunction_migong(int maze[50][50],int m,int n){flag=1;struct point p={0 ,0, -1};if(maze[p.row][p.col]==1){printf("can't find the way\n'");flag=0;return 0;}maze[p.row][p.col]=2;enqueue(p);while(!isempty()){p=dequeue();if((p.row==m-1)&&(p.col==n-1)) break;if((p.col+1<n)&&(maze[p.row][p.col+1]==0)) visit(p.row,p.col+1,maze);if((p.row+1<m)&&(maze[p.row+1][p.col]==0)) visit(p.row+1,p.col,maze);if((p.col-1>=0)&&(maze[p.row][p.col-1]==0)) visit(p.row,p.col-1,maze);if((p.row-1>=0)&&(maze[p.row-1][p.col]==0)) visit(p.row-1,p.col,maze); }//遍历四个方向if(p.row==m-1&&p.col==n-1){maze[p.row][p.col]=3;while(p.predecessor!=-1){p=queue[p.predecessor];//回去找可以走过来的点以便打印maze[p.row][p.col]=3;}}else{printf("can't find the way\n");flag=0;return 0;}}int main(){int m,n,t;printf("请输入测试数:\n");scanf("%d",&t);while(t--){printf("\n请输入行数:");scanf("%d",&m);printf("\n");printf("请输入列数:");scanf("%d",&n);shoudong_maze( m, n);mainfunction_migong(maze,m,n);if(flag!=0) result_maze(m,n);} return 0; }
0 0
- 队列实现迷宫问题
- 队列实现迷宫问题
- 队列实现迷宫问题(垃圾版)
- 队列求迷宫问题
- 队列实现迷宫问题(精装版,可返回路径)
- 栈和队列的底层实现及迷宫问题
- 迷宫问题(栈,递归,队列)
- 用队列解迷宫问题
- 用队列实现迷宫求解
- 搜索实现迷宫(队列)
- 栈实现-迷宫问题
- C++实现迷宫问题
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- 数据结构(C语言版)”栈与队列“章节迷宫求解问题的思路与实现
- 第5周实践项目5 迷宫问题(栈和队列实现)
- 数据结构:栈和队列-迷宫问题求解
- 解决迷宫问题, 栈和队列
- 用循环队列解迷宫问题
- 普通用户的注册和管理员的权限操作
- 集合笔记
- 获取treeviewitem对象和TreeViemItem对象的一些问题
- 111 AddressBookUI
- Json的一些了解
- 队列实现迷宫问题
- binder驱动使用的数据结构说明
- Modeling Video Evolution For Action Recognition - cvpr - 2015
- @selector 调用方法 传递多参数
- 点击屏幕任意区域软键盘消失
- html
- Android之Toast显示不出来原因
- Spring 学习日记 (1)配置文件的装载
- android 进程优先级