图论------创建邻接表图,打印邻接表图,无权最短路径输出函数
来源:互联网 发布:java多条件查询 编辑:程序博客网 时间:2024/06/07 06:03
// 图论算法//#include "stdafx.h"#include <iostream>#include <queue>#include <stack>#include <vector>using namespace std;typedef struct vertex { int v; int Known; int Distance; int PreVertex; int Weight; vertex *next;}vertex;vertex *V[100]; //全局变量/**********************功能:创建无权邻接表输入:顶点个数输出:邻接表指针数组**********************/void createVertexNoWeight(int N){ vertex *q, *p; for (int j = 0;j < N;j++) { int k; cin >> k; V[j] = new vertex; p = V[j]; V[j]->v = j; V[j]->Distance = 888888; V[j]->Known = 0; for (int i = 0;i < k;i++) { int temp; cin >> temp;//第j个邻接表的顶点个数 q = new vertex; q->v = temp-1;; p->next = q; p = p->next; } p->next = 0; }}/**********************功能:创建有权邻接表输入:顶点个数输出:邻接表指针数组**********************/void createVertexHasWeight(int N){ vertex *q, *p; for (int j = 0;j < N;j++) { int k; cin >> k; V[j] = new vertex; p = V[j]; V[j]->v = j; V[j]->Distance = 888888; V[j]->Known = 0; for (int i = 0;i < k;i++) { int temp, weight; cin >> temp >> weight;//第j个邻接表的顶点个数 q = new vertex; q->v = temp - 1; q->Weight = weight; p->next = q; p = p->next; } p->next = 0; }}/**********************功能:显示邻接表输入:邻接表指针数组输出:邻接表**********************/void printfVertex(int N){ vertex *p; for (int i = 0;i < N;i++) { p = V[i]->next; cout << i+1 << " "; while (p) { cout << p->v<<" "; p = p->next; } cout << endl; }}/**********************功能:无权最短路径算法(广度优先搜索BFS)输入:根顶点输出:该顶点到各个顶点的最短路径长度**********************/void unWeight(vertex *s){ queue<vertex> Q; //创建队列 vertex* w, *t;//创建缓冲顶点 w = new vertex; t = new vertex; s->Distance = 0;//给根顶点的距离赋值0 Q.push(*s);//入队 while (!Q.empty())//判断队列是否为空,是空的话说明每一个相关顶点都访问到了 { *w = Q.front();//取到队首顶点 Q.pop();//队尾出队 V[w->v]->Known = 1;//给该顶点访问值赋值1 t = w->next;//取到该顶点的邻接表 while (t)//没有到底 { if (V[t->v]->Distance == 888888)//判断是否访问 { V[t->v]->Distance = V[w->v]->Distance + 1;//没有访问过的话,这个顶点到根顶点的距离是此邻接表的根顶点与根顶点的距离+1 Q.push(*V[t->v]);//将这个顶点入栈进行后续处理 } t = t->next;//取这条邻接表上的下一个顶点 } }}/*************测试****************/int main(){ int N; cin >> N; createVertexNoWeight(N); printfVertex(N); unWeight(V[2]); for (int i = 0;i < N;i++) cout << V[i]->Distance; system("pause"); return 0;}
阅读全文
0 0
- 图论------创建邻接表图,打印邻接表图,无权最短路径输出函数
- 用邻接表实现图的深度优先遍历、广度优先遍历、最短路径(无权图)
- 图之Dijkstra算法(邻接表)---最短路径
- 华为2014上机考试样题_高级题_地铁换乘最短路径_无向无权图+邻接表存储+BFS广度优先算法
- 华为2014上机考试样题_高级题_地铁换乘最短路径_无向无权图+邻接表存储+BFS广度优先算法
- ACM-最短路径邻接表
- 最短路径(邻接表)-Dijkstra算法
- 图的邻接表创建输出
- 无权图-最短路径
- 邻接表创建图
- 邻接表创建图
- 邻接表创建图
- 打印无权无向图的所有最短路径
- SDUTOJ 2143 图结构练习——最短路径 邻接链表 SPFA算法
- 有向图中Dijstra最短路径算法的邻接表实现
- pku 1511(最短路径,spfa静态邻接表)
- PKU1511(Invitation Cards)最短路径-邻接表+SPFA算法
- hrbust1339 Touring (Dijkstra最短路径)(邻接表)
- phpExcel的整合与使用,遇到的问题
- 【NOIP模拟8.10】
- hbase原理
- UI设计师具备四大维度能力剖析
- javascript中的内存泄漏问题
- 图论------创建邻接表图,打印邻接表图,无权最短路径输出函数
- 构造函数 时钟程序
- 布局:三栏布局(7种方法)
- App接入支付宝开发流程
- dropwizard微服务实践
- 51nod 1085 背包问题01
- java8 Optional
- Spring AOP详解及通过XML配置实现的实现方法
- 在存储过程中创建临时表来重构数据