C++ 图论算法实现项目日程安排 - 最少比赛场次
#include
#include
#include
#include
#include <stdio.h> /stdio.h是标准输出/输出头文件。可以简单理解为在这个文件中包含 了一些输入和输出的函数。换句话说,要用到printf()和scanf() 这两个打印和输入函数,就必须要有这个文件/
#include <windows.h> /是写window程序需要的重要头文件,之后用到system("pause")/
using namespace std; /namespace 被称为 命名空间,使用时可以将其认为是一块单独开 辟出的空间。这块空间内,可以随意定义 变量、函数等。命名空 间内的变量 是不会与 命名空间外 的 其他同名变量 冲突的。将 命为 std 的空间展开了,而 std 可以看作是C++提供的标准库的 函数所在的 命名空间/
int map[49] = { 0 };
void Create(int a[]) { //根据用户输入进行建图 for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) if ((a[i] != a[j]) && (a[i] != 0) && (a[j] != 0)) { map[(a[i] - 1) * 7 + (a[j] - 1)] = 1; } }
struct Node { //图结点 int index;//结点在矩阵中的行数即位置 int degree;//结点度数,用于根据从大到小的度数关系进行涂色 int mark;//结点染色标记 };
string name[] = { '标枪', '铅球', '铁饼', '100m', '200m', '跳远', '跳高' };
bool cmp(Node a, Node b) { //自定义'小于' return a.degree > b.degree; }
void Print(vector
int fillcolor(int map[], int n) { //涂色
cout << '邻接矩阵' << endl;
int Mark = 0;
vector
for (int i = 0; i < n; i++) {
for (int j = 0; j < mark.size(); j++) { //取染色集元素进行染色
if (node[i].mark == 0)
node[i].mark = mark[j];
for (int k = 0; k < n; k++) {
if ((map[node[i].index * n + k] == 1) && (node[k].mark == node[i].mark)) { //两结点相邻且颜色相同,取消标记
node[i].mark = 0;
break;
}
}
}
if (node[i].mark == 0) {
mark.push_back(++Mark);
node[i].mark = mark.back();
}
}
Print(mark, n, node, Mark); //创建可视化图表
return Mark;//返回所需场次
};
int main() { cout << '各项目对应编号为:标枪(1),铅球(2),铁饼(3),100m(4),200m(5),跳远(6),跳高(7) ' << endl; cout << '请依次将选手所报项目编号输入' << endl; int a[3] = { 0 }; string b[5] = { '张三', '李四', '王五', '赵六', '李七' }; for (int i = 0; i < 5; i++) { cout << '请输入 ' << b[i] << ' 所报项目编号:'; for (int j = 0; j < 3; j++) { a[j] = cin.get() - 48; if (j == 2 && a[j] != -38) cin.get(); else if (a[j] == -38) { a[j] = 0; break; } } Create(a); } for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) cout << map[i * 7 + j] << ' '; cout << endl; } int n = fillcolor(map, 7); cout << '将需要比赛' << n << '场' << endl; system('pause'); }
系统功能模块结构图及主要函数说明?内容:系统功能模块结构图如下:
+-----------------+
| 主函数 |
+-----------------+
|
|
+-----------------+
| Create |
+-----------------+
|
|
+-----------------+
| fillcolor |
+-----------------+
|
|
+-----------------+
| Print |
+-----------------+
主要函数说明如下:
Create(int a[]): 根据用户输入的项目编号,建立图的邻接矩阵。fillcolor(int map[], int n): 对图进行涂色操作,返回所需的比赛场次。Print(vector<int> mark, int n, vector<Node> node, int Mark): 创建可视化图表,将图的涂色结果输出。main(): 主函数,负责用户输入和调用其他函数实现系统功能。
原文地址: https://www.cveoy.top/t/topic/fwXt 著作权归作者所有。请勿转载和采集!