#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<<"************************邻接矩阵**************************"< 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