#include
#include studio.h
为什么会这样,该怎样修改呢
4条回答 默认 最新
- qfl_sdu 2022-11-29 17:09关注
注释如下
#include<iostream> #include <string.h> #include<vector> #include<stdlib.h> using namespace std; struct node { int t; //起始顶点 int w; //终点 int y; //权重 }; struct node a[20010]; //保存所有的边 int s[1010] = { 0 }; //保存每个顶点的作为起点的边的个数 int cmp(const void* a, const void* b) { //比较函数,用于排序 struct node* c = (node*)a; //void指针转为node指针,便于进行比较 struct node* d = (node*)b; //void指针转为node指针,便于进行比较 if (c->t != d->t) return c->t - d->t; //先根据边的起点比较 else return c->w - d->w; //如果起点相等,则根据终点进行比较 } int main() { int n, e, t, w, y, sum; cin >> n >> e; //输入顶点和边的个数 for (int i = 0; i < e; i++) //初始化边结构体数组,这个for循环可以不要 { a[i].t = -1; //初始化为-1 a[i].w = -1; a[i].y = -1; } int max = 0; //这个变量没用 for (int i = 0; i < e; i++) { //输入e条边的信息 cin >> a[i].t >> a[i].w >> a[i].y; //输入起点、终点和权重 s[a[i].t]++; //t是起始顶点,s保存t作为起点时边的个数 } qsort(a, e, sizeof(a[0]), cmp); //调用qsort进行排序,排序的比较函数逻辑由cmp提供(先根据边的起点排序,如果起点相同,再根据终点排序),从小到大排序 //输出 int i = 0; while (i < e) { //输出e条边 sum = s[a[i].t]; //得到每个顶点作为起点的边的个数 printf("%d:", a[i].t); //输出起点id for (int j = i; j < sum + i; j++) { //输出a[i].t作为起始顶点的所有边的信息 printf("(%d,%d,%d)", a[j].t, a[j].w, a[j].y); //输出起点、终点、权重 } i = i + sum; //i是已经显示的边的个数,sum是每个顶点的边的个数,这里进行累加 printf("\n"); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
- ¥15 C# datagridview 单元格显示进度及值
- ¥15 thinkphp6配合social login单点登录问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 虚心请教几个问题,小生先有礼了
- ¥30 截图中的mathematics程序转换成matlab