博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拓扑排序(邻接矩阵)
阅读量:6992 次
发布时间:2019-06-27

本文共 3057 字,大约阅读时间需要 10 分钟。

#include "stdafx.h"#include 
#include
#include
#include
using namespace std;#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20 //顶点最多个数#define LENGTH 5 //顶点字符长度//邻接矩阵typedef struct _Graph{ int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 char vexs[MAX_VERTEX_NUM][LENGTH]; //顶点数组 int vexnum; //顶点个数 int arcs; //弧的个数}Graph;int LocateVex(const Graph & g, char name[LENGTH]){ for (int i = 0; i < g.vexnum; i++) { if (0 == strcmp(g.vexs[i], name)) { return i; } } return -1;}//图的建造void CreateGraph(Graph &g){ ifstream fcin(_T("graph.txt")); fcin>>g.vexnum; for (int i = 0; i < g.vexnum; i++) { for (int j = 0; j < g.vexnum; j++) { g.matrix[i][j] = INFINITY; } } for (int i = 0; i < g.vexnum; i++) { fcin>>g.vexs[i]; } fcin>>g.arcs; char arcHead[LENGTH]; char arcTail[LENGTH]; int weight; for (int i = 0; i < g.arcs; i++) { memset(arcHead, 0, LENGTH); memset(arcTail, 0, LENGTH); fcin>>arcTail>>arcHead>>weight; int x = LocateVex(g, arcHead); int y = LocateVex(g, arcTail); g.matrix[y][x] = weight; }}//v的第一个邻接点int FirstAdjVex(const Graph &g, int v){ for (int i = 0; i < g.vexnum; i++) { if (g.matrix[v][i] != INFINITY) { return i; } } return -1;}//v相对于w的下一个邻接点int NextAdjVex(const Graph &g, int v, int w){ for (int i = w + 1; i < g.vexnum; i++) { if (g.matrix[v][i] != INFINITY) { return i; } } return -1;}//邻接矩阵的输出void PrintAdjVex(const Graph &g){ for (int i = 0; i < g.vexnum; i++) { for (int j = 0; j < g.vexnum; j++) { if (g.matrix[i][j] == INFINITY) { cout<<"*"<<'\t'; } else { cout<
<<'\t'; } } cout<
q; int i = 0; for (; i < g.vexnum; i++) { if (indegree[i] == 0) { q.push(i); } } int count = 0; while (!q.empty()) { i = q.front(); q.pop(); count++; cout<
<<" "; for (int j = 0; j < g.vexnum; j++) { if (g.matrix[i][j] != INFINITY) { if (!(--indegree[j])) { q.push(j); } } } } if (count < g.vexnum) { return false; } else { return true; }}//************************************拓扑排序************************************end//辅助函数,设置控制台的颜色void SetConsoleTextColor(WORD dwColor){ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); if (INVALID_HANDLE_VALUE == handle) { return; } SetConsoleTextAttribute(handle, dwColor);}int _tmain(int argc, _TCHAR* argv[]){ Graph graph; CreateGraph(graph); SetConsoleTextColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); cout<<"************************邻接矩阵**************************"<

界面运行如下:

建造图所用的graph.txt如下:

8V1 V2 V3 V4 V5 V6 V7 V8 10V1 V2 10V1 V3 50V2 V4 30V3 V5 40V3 V6 99V4 V5 2V4 V7 60V5 V7 80V6 V8 22V7 V8 70

转载地址:http://ahfvl.baihongyu.com/

你可能感兴趣的文章
自己动手实现线性映射,哈希映射
查看>>
依然莫名其妙的内容查询Web部件(Content Query Web Part)
查看>>
删除专家账号,要注意删干净
查看>>
抗投诉空间
查看>>
python代码 构建验证码
查看>>
Linux动态库和静态库
查看>>
js基础--高阶函数(map,reduce,filter,sort)
查看>>
结合数据结构来看看Java的String类
查看>>
全排列——DFS实现
查看>>
go 语言与循环
查看>>
iOS版 hello,world版本2
查看>>
重构遗留代码(1):金牌大师
查看>>
go:数组
查看>>
网站重构的理解
查看>>
PAT L1-043. 阅览室
查看>>
linux 命令与文件的查询
查看>>
MYSQL数据库引擎 MYISAM和 INNODB区别
查看>>
设计模式之原型模式
查看>>
BootStrap常用组件及响应式开发
查看>>
TS学习之for..of
查看>>