广度优先搜索 最短路径 队列
来源:互联网 发布:复读软件 编辑:程序博客网 时间:2024/04/29 10:16
//============================================================================// Name : Bfs.cpp// Author : judyge// Version :// Copyright : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include<iostream>using namespace std;int map[5][5];int vis[5][5];struct node{ int x; int y; int pre;}edge[100]; //节点队列int front=0,rear=1;//队头,队尾int dir[4][2]={{0,-1},{1,0},{0,1},{-1,0}}; //四种方向void f(int i)//根据pre 倒向追踪法路径{ if(edge[i].pre!=-1) { f(edge[i].pre); cout<<"("<<edge[i].x<<", "<<edge[i].y<<")"<<endl; }}void BFS(int x,int y){ edge[front].x=x; //开始时节点 edge[front].y=y; edge[front].pre=-1; while(front<rear)//队列为空时终止 { int u; for(u=0;u<4;u++) //下一节点---四个方向 { //从队头取一个 找他的下一节点 int x=edge[front].x+dir[u][0]; int y=edge[front].y+dir[u][1]; //下一节点 如果被遍历---或是墙----或是障碍物 if(x<0||x>=5||y<0||y>=5||vis[x][y]==1||map[x][y]==1) continue; //找下一个方向 else //下一节点 如果没遍历---不是墙----不是障碍物 { vis[x][y]=1; //下节点设置为遍历过 map[x][y]=1; edge[rear].x=x;//下一节点--入队 edge[rear].y=y; edge[rear].pre=front; //记录他的前一节点 rear++; } if(x==4&&y==4)//如果下一个节点为 4,4 f(front); // 找到他以前的路径打印 算一个解法 } front++;//对头出队 }}int main(){ int i,j; for(i=0;i<5;i++) { for(j=0;j<5;j++) { cin>>map[i][j]; //输入图 } } memset(vis,0,sizeof(vis)); cout<<"("<<"0, 0)"<<endl; BFS(0,0); cout<<"(4, 4)"<<endl; return 0;}
//============================================================================// Name : bfs2.cpp// Author : judyge// Version :// Copyright : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include<stdio.h>//四个方向const int di[4] = {0,1,0,-1}, dj[4] = {1,0,-1,0};//地图unsigned maze[5][5] = { 2, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0}, head = 0, tail = 1;//节点队列struct { int i, j; } que[23] = {0};void print_maze(void){ int i, j; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) printf("%d ", maze[i][j]); putchar('\n'); } printf("*********\n");}//输出路径int main(void){ while (head != tail) { head = (head + 1) % 23; //头节点出队 int i; for (i = 0; i < 4; i++) //如果下一节点不是墙 不是障碍物 没有被遍历 if (que[head].i + di[i] >= 0 && que[head].i + di[i] < 5 && que[head].j + dj[i] >= 0 && que[head].j +dj[i] < 5 && maze[que[head].i + di[i]][que[head].j +dj[i]] == 0) { // 下一节点入队 que[tail = (tail + 1) % 23].i = que[head].i + di[i]; que[tail].j = que[head].j +dj[i]; maze[que[head].i + di[i]][que[head].j +dj[i]] = 2; //标记已经遍历过 if (que[head].i + di[i] == 4 && que[head].j +dj[i] == 4) { printf("Have path.\n");//如果找到出口 } } print_maze(); //打印地图状况 } printf("No path.\n"); return 0;}
0 0
- 广度优先搜索 最短路径 队列
- 无权最短路径-广度优先搜索
- 最短路径算法-广度优先搜索
- 无权最短路径-广度优先搜索
- 广度优先搜索之最短路径
- 无权最短路径 广度优先搜索
- 最短路径算法-广度优先搜索
- 最短路径/广度优先
- 迷宫最短路径 --- 广度优先搜索(广搜)
- 广度优先搜索迷宫的最短路径走法!
- 最短路径条数问题 - 广度优先搜索
- 城市最短路径问题--图的广度优先搜索
- 迷宫最短路径 广度优先搜索—C
- 迷宫问题(广度优先搜索,输出最短路径)
- (原创)广度优先搜索解决最短路径问题
- 算法之------深度优先搜索DFS和广度优先搜索BFS(最短路径)
- 最短路径算法之----广度优先
- BFS广度搜索(最短路径问题)
- Java之deep copy(深复制)
- 回调函数的理解
- 服务器项目目录搭建,gradle 搭建项目web目录,source folder,folder相互转换,部署路径配置,
- [原]Android 系统应用Setting开发总结
- Java环境变量配置以及classpath详解
- 广度优先搜索 最短路径 队列
- 如何成为邮件营销“标题党”?
- Java中的异常
- 如何将本地代码上传到远程仓库
- 电脑无线(外网)和有线(内网)网络同时使用方法
- Eclipse快捷键 10个最有用的快捷键
- SpringMVC入门示例教程(二)
- 如何实现ListView 不写adpater也可以看到,也可以在布局界面看到listview的效果
- Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of