关于这道题,我要说两句,这道题我觉得我用拓扑排序的思路肯定是没错的,而且也对了几组数据,但是其他几组却超时,肯定是哪里的代码优化的不够好。。。。。。

最后只得了40分。。。

旅行商(TSP)

描述

Shrek是一个大山里的邮递员,每天负责给所在地区的n个村庄派发信件。但杯具的是,由于道路狭窄,年久失修,村庄间的道路都只能单向通过,甚至有些村庄无法从任意一个村庄到达。这样我们只能希望尽可能多的村庄可以收到投递的信件。

Shrek希望知道如何选定一个村庄A作为起点(我们将他空投到该村庄),依次经过尽可能多的村庄,路途中的每个村庄都经过仅一次,最终到达终点村庄B,完成整个送信过程。这个任务交给你来完成。

输入

第一行包括两个整数n,m,分别表示村庄的个数以及可以通行的道路的数目。

以下共m行,每行用两个整数v1和v2表示一条道路,两个整数分别为道路连接的村庄号,道路的方向为从v1至v2,n个村庄编号为[1, n]。

输出

输出一个数字,表示符合条件的最长道路经过的村庄数。

输入样例

4 3
1 4
2 4
4 3

输出样例

3

限制

1 ≤ n ≤ 1,000,000

0 ≤ m ≤ 1,000,000

输入保证道路之间没有形成环

时间:2 sec

空间:256MB

提示

拓扑排序

最后提交给那个OJ的代码:

#include<iostream>
#include <stdio.h>
#include <malloc.h>#define MAXSIZE 100002
#define TRUE 1
#define FALSE 0using namespace std;typedef int VertexData;
typedef int AdjType;//保存每个节点的最大路数
int Roads[MAXSIZE+1];
int maxRoad=0;typedef struct Stack          //定义栈
{int data[MAXSIZE+1];int top;
}Stack;typedef struct ArcNode        //定义弧结点
{AdjType adj;ArcNode *nextArc;
}ArcNode;typedef struct VertexNode    //定义顶点
{VertexData vertexData;ArcNode *firstArc;
}VertexNode;typedef struct AdjMatrix     //定义图
{VertexNode vertexNodes[MAXSIZE+1];int verNum,arcNum;
}AdjMatrix;//全局变量
int indegree[MAXSIZE+1]={0};int LocateGraph(AdjMatrix *g, VertexData vertexData)
{int iIndex;for(iIndex=1;iIndex<=g->verNum;iIndex++){if(vertexData==g->vertexNodes[iIndex].vertexData)return iIndex;}return FALSE;
}void  CreateGraph(AdjMatrix *g)
{int iCount,arcStart,arcEnd;int start,end;//输入有向无环图的顶点,及弧数cin>>g->verNum>>g->arcNum;//输入有向无环图的顶点信息ArcNode *q=NULL;for(iCount=1;iCount<=g->verNum;iCount++){    g->vertexNodes[iCount].vertexData=iCount;g->vertexNodes[iCount].firstArc=NULL;}for(iCount=1;iCount<=g->arcNum;iCount++){//输入弧的起始与结束的信息cin>>start>>end;arcStart=LocateGraph(g,start);arcEnd=LocateGraph(g,end);//添加弧结点q=(ArcNode*)malloc(sizeof(ArcNode));q->adj=arcEnd;q->nextArc=g->vertexNodes[arcStart].firstArc;g->vertexNodes[arcStart].firstArc=q;//对于第arcEnd个顶点的入度值加1indegree[arcEnd]++;}
}//判栈空
int IsEmpty(Stack *stack)
{return stack->top==-1?TRUE:FALSE;
}//初始化栈
void InitStack(Stack *stack)
{stack->top=-1;
}//出栈
void Pop(Stack *stack,int *iIndex)
{*iIndex=stack->data[stack->top--];
}//进栈
void Push(Stack *stack,int value)
{stack->data[++stack->top]=value;
}//拓扑排序
void Tuopu(AdjMatrix *g)
{int iCount;Stack *stack=(Stack*)malloc(sizeof(Stack));InitStack(stack);ArcNode *p=NULL;//初始化 路数,都等于1for(iCount=1;iCount<=g->verNum;iCount++)Roads[iCount]=1;//对于入度为0的顶点入栈for(iCount=1;iCount<=g->verNum;iCount++){if(indegree[iCount]==0){Push(stack,iCount);}}//输出拓扑序列//输出顶点后,将与该顶点相连的顶点的边删除,将与相连顶点的入度减1,如减后为0,入栈,栈空结束while(!IsEmpty(stack)){Pop(stack,&iCount);//cout<<g->vertexNodes[iCount].vertexData<<" ";//这里处理路数p=g->vertexNodes[iCount].firstArc;while(p!=NULL){ if(--indegree[p->adj]==0)Push(stack,p->adj);if(Roads[g->vertexNodes[iCount].vertexData]+1>Roads[p->adj])Roads[p->adj]=Roads[g->vertexNodes[iCount].vertexData]+1;if(maxRoad<Roads[p->adj])maxRoad=Roads[p->adj];p=p->nextArc;}}//end while//cout<<endl;
}int main()
{AdjMatrix *g=(AdjMatrix*)malloc(sizeof(AdjMatrix));CreateGraph(g);Tuopu(g);printf("%d\n",maxRoad);return 0;
}

结果:

【Tsinghua】旅行商(TSP)相关推荐

  1. 鲸鱼优化算法WOA求解旅行商TSP优化问题(2022.6.2)

    鲸鱼优化算法WOA求解旅行商TSP优化问题(2022.6.2) 引言 1.鲸鱼优化算法WOA 1.1 WOA算法原理介绍 1.1.1 包围猎物 1.1.2 气泡网式攻击猎物(开发阶段) 1.1.3 寻 ...

  2. 模拟退火(SA, Simulated Annealing)算法解决旅行商TSP问题

    01 什么是旅行商问题(TSP)? TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如 ...

  3. 分支限界解决旅行商tsp问题

    本人的算法大作业 参考博客: http://blog.csdn.net/qq_32400847/article/details/51813606 http://www.cnblogs.com/ciel ...

  4. 【路径规划】基于灰狼算法求解旅行商TSP问题matlab源码

    一.旅行商问题 TSP问题即旅行商问题,经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地.应如何选择行进路线,以使总的行程最短.从图 ...

  5. 旅行售货员 java_JAVA旅行商售货TSP

    题目描述 有若干个城市,任何两个城市之间的距离都是确定的,现要求一旅行商从某城市出发必须经过每一个城市且只在一个城市逗留一次,最后回到出发的城市,问如何事先确定一条最短的线路以保证路径最短? 输入 输 ...

  6. MATLAB实战系列(十九)-遗传算法解决TSP(旅行商)问题-应用及解析(文末附MATLAB源码)

    接上篇MATLAB实战系列(十八)-遗传算法解决TSP(旅行商)问题-算法原理 https://wenyusuran.blog.csdn.net/article/details/114060030 感 ...

  7. matlab算法大全 pdf_遗传模拟退火算法求解旅行商(TSP)问题

    hello大家好,很高兴又和大家见面了.在之前的遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解和模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解这两篇推文中,分别讲解了 ...

  8. 美国本土四十八个州府48个州府所在城市的TSP旅行商回路17110km

    美国本土四十八个州府48个州府所在城市的旅行商回路17110km 在网上找了美国四十八个州府城市的经纬度http://chi.timegenie.com/latitude_longitude/coun ...

  9. 蚁群算法--旅行商(TSP)问题详解

    蚁群算法--旅行商(TSP)问题详解 蚁群算法 问题与分析 结果显示与分析 蚁群算法 蚁群算法(ant colony optimization)最早是由Marco Dorigo等人在1991年提出,他 ...

最新文章

  1. qt 拖拽 修改大小(二)
  2. win10 64位SSDT函数索引动态查找
  3. 可口可乐开了家网店卖奶,价值62亿元
  4. 使用linux批量引物设计,干货分享:如何快速设计多条qPCR引物?
  5. Spring 自带的一些工具类
  6. WebAssembly 介绍
  7. 迅雷精简版 for Mac!附精简教程!
  8. mescroll.js 上拉刷新 下拉加载
  9. 阿里云服务器升级openssl1.1.1k 2021-07最新
  10. 俄罗斯方块游戏开发教程1:整体流程
  11. mini-itx PC:推测Intel D525MW支持UEFI
  12. linux上centos镜像磁盘,VirtualBox中配置linuxCentOS的本地磁盘镜像iso作为其软件源
  13. 求(2Y-4)²-4(Y-2)(3Y+7)≥0得解题过程和思路
  14. 安的广厦千万间 天下寒士尽欢颜
  15. redisflush操作
  16. 高斯数据库与mysql_高斯数据库 (gaussDB) - 创建和管理数据库
  17. STM32芯片包下载地址
  18. php占用服务器内存,php-fpm占用cpu和内存过高100% 解决办法
  19. 欧几里得和扩展欧几里得算法
  20. 计算机硬件设备ppt教案,计算机的硬件组成课件.ppt

热门文章

  1. 基于 Alfred Workflow 的开发效率小工具
  2. C++ 谷歌小恐龙#1 游戏制作实录
  3. 在非越狱手机上进行App Hook
  4. 智慧仓储之整体化应急物资仓储管理解决方案,减少成本,提高运营-新导智能
  5. 鸿蒙需要多少技能命中,阴阳师阎魔新版斗技实测:速度和命中哪个重要
  6. iOS 适配iOS11、iPhone X
  7. 分子对接教程 | (2) 选择合适的蛋白受体
  8. 硬件设计36之什么是晶振?
  9. 写给未来的自己几句话
  10. C语言温控风机程序,温度控制电风扇单片机c系统proteus仿真.docx