图
文章平均质量分 62
fengsigaoju
本科:南京邮电大学
座右铭:凤兮凤兮思高举!
展开
-
图的宽度优先遍历--最少转机
//题目描述:第一行第一个数n代表有n个城市,第二个数m代表有m个航班,接下来两个数代表起点和终点//接下来m行,每行3个数表示c到d有航班,注意两个城市之间的航班可以互相到达,求最少转机次数#include #include #include using namespace std;int book[101];int a[101][101];int n;int原创 2015-07-08 21:01:44 · 1515 阅读 · 0 评论 -
迪杰斯特拉邻接矩阵存储方式
#include int main() { int a[101][101]; int i,j,c,d,e,n,m,min,u,k; int book[101]; int dis[101];//1到其余点的的距离 scanf("%d%d",&n,&m); for (i=1;i for (j=1;j原创 2015-07-08 21:06:14 · 960 阅读 · 0 评论 -
弗洛伊德算法
#include //弗洛伊德算法求解任意两点之间的距离 int main() { int a[100][100]; int i,j,k,n,m,c,d,e; scanf("%d%d",&n,&m); for (i=1;i for (j=1;j if (i==j)a[i][j]=0; els原创 2015-07-08 21:04:12 · 629 阅读 · 0 评论 -
飞机最少换乘(迪杰斯特拉实验)
#include #include int n,m;int s[100][100];int Dijkstra(int start,int end){ int i,j,k; int min; int dis[100000]; int book[100]; memset(dis,0,sizeof(dis)); memset(book,0,siz原创 2015-12-13 14:37:34 · 1012 阅读 · 0 评论 -
拓扑排序简单应用poj2367
//题目大意:输入n,接下来n行,每一行的编号都比这一行的数字优先#include #include #include #include using namespace std;queueq; int main() { int n,m,i,j; int a[105][105]; int indegree[105]; int ans[105],原创 2015-11-26 23:24:15 · 528 阅读 · 0 评论 -
南邮离散大作业欧拉回路
估计看这篇博客的人都是南邮的学生,都知道要求(随机生成矩阵可以选择是无向图还是有向图,我这是无向图,然后判断欧拉回路还是欧拉道路,打印路径)直接上代码....关于欧拉回路的详细介绍在我以前的博客有过详细的说明http://blog.csdn.net/fengsigaoju/article/details/47210177(有向图)无向图http://blog.csdn.net/fengsiga原创 2015-12-16 21:34:02 · 991 阅读 · 0 评论 -
拓扑排序输出全部路径
方式是回溯,关键在于退回来时不仅要删除标记数组visit,同时还要将这个点的入度+1,为什么,我们可以想一下当DFS返回时,就是和这个点相连的边都被访问过了,比如1然后是2....现在1后面不想为2了,就要将2的入度还回去,同时标记取消。#include #include #include using namespace std; int n,m; int s[100][100];原创 2015-11-29 22:16:21 · 6793 阅读 · 0 评论 -
POJ1789
普里姆算法入门题 题目大意:给你n串长度为7的字符串,每两个字符串的距离就是他们中间相差的字符个数,现在求解将所有字符串变成一样的所化的最少代价。思路:一旦两个字符串找到不一样的字符,就将这两个字符串的距离加1,最后求n个字符串的最小代价生成树。(注意最大距离写大点,贡献一个wa)#include #include int map[2117][2117];int book[21原创 2015-11-29 23:21:10 · 461 阅读 · 0 评论 -
AOE网络
首先AOE网络关于关键路径的求取是建立在拓扑排序得到的顺序上的,因为后面求early和late的顺序要求求后面时前面已知,如果我要求到数据结构的距离却发现到c语言的距离还不知道显然求不出来.求出关键路径后分别求出early和late最后当early和late相等时就是关键路径,注意关键路径可能有几条比如1->2->4,1->3->4的长度一样则会输出1,2,3,4解决办法是判断从前一个节点到后原创 2015-11-29 22:24:24 · 1564 阅读 · 0 评论 -
公交换乘(南邮上机选做题)
这个还是挺有技巧性的,与飞机的区别在于中途可以转车,而转车之前无论经过多少站都认为是1,比如第一条线路1-2-3-4而第二套线路2-3-5则1-5需要换乘一次而不是他们之间的距离解决方式是每读入一条线路,就将他们两两组合,认为他们之间只需要1次就可以到达,然后求1-5的转车次数就是求1-5的最短路径,考虑到如果直接就是一条线路就是1,而转一次就是2,所以转化为求最短路径....#i原创 2015-12-16 21:29:33 · 818 阅读 · 0 评论 -
poj2387(最简单的最短路)
此题是最简单的短路,告诉你边数m,点数n,接下来m行点,点,距离,求1~n的最短距离但是要考虑重边(wa了两次看题解才发现这个坑...),即2到3可能不止一条路,只需记录最短的那条路,我用迪杰斯特拉#include #include int dis[1005];int s[1005][1005];int book[1005],min; int main() { int原创 2015-12-03 23:49:21 · 818 阅读 · 0 评论 -
poj3259
一段时间没编程了,手感很生硬,一道bellon-ford的模板题,关键容易出错的是还要反向保存一次,bellon-ford的思想就是先放缩,然后发现还可以放缩说明含有负权回路。#include int s[10005],e[10005],v[10005],dis[10005];//第i条道路的起点,终点和权值 int main() { int i,j,k,n,m,w,flag,原创 2016-01-30 18:39:38 · 300 阅读 · 0 评论 -
备用交换机(割点)
n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接。因电子设备容易损坏,需给通讯点配备备用交换机。但备用交换机数量有限,不能全部配备,只能给部分重要城市配置。于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配备备用交换机。请你根据城市线路情况,计算需配备备用交换机的城市个数,及需配备备用交换机城市的编号。分析:无向图求割点。求割点分原创 2016-02-22 21:46:09 · 915 阅读 · 0 评论 -
哈夫曼树的实现
哈夫曼树是一个很经典的问题,本文输入是一串数字,然后输出生成哈夫曼树的中序遍历结果#include #include typedef struct node//每个树的节点至少包含3个内容,节点的权值,左子树,右子树的地址{ int element; struct node *Lchild,*Rchild;}node;typedef struct原创 2015-08-13 23:32:52 · 868 阅读 · 0 评论 -
Bellman-For判断负权回路
//Bellman--Food解决负权边//什么叫负权回路,就是一个图内每个边的权值有正有负,且存在回路使该回路的权值之和为负数,就叫做负权回路,负权回路是不能求两点之间的最短路的,因为如果得到一个最短路,那么再走一次负权回路就会更短~~//注意文中默认的是有向图,所以要注意测试数据//判断负权回路只需在原来n-1次循环之后再进行一次判断,若还能放缩,就说明含有负权回路//第一行读原创 2015-07-14 21:54:41 · 1188 阅读 · 0 评论 -
有向图的欧拉回路及欧拉道路
//有向图//欧拉回路:1.图连通2.每个点的入度等于出度//欧拉道路:1.图连通2.每个点的入度等于出度或有两个点入度不等于出度,且一个点出度比入度大一(起点),另一个点入度比出度小一(终点)如下图只能从中间一点开始到中间另一点结束,并且起点出度比入度大一//程序本身并不复杂,无非是将无向图中对于度数的判断奇偶改为判断入度和出度是否相等//保存路径时需要注意一点,an原创 2015-08-02 19:57:16 · 7673 阅读 · 0 评论 -
图的宽度优先搜索
图的宽度优先搜索是按照某种顺序访问一个节点的所有子节点,这一层节点扫描结束后再扩展到下一层访问顺序为1-2-3-4-5现在在第一行输入n个节点,m个关系式接下来输入m行关系式,每行关系式包含c,d分别表示c,d节点相连要求输出图的宽度有限遍历顺序~~#include #include #include using namespace std;原创 2015-07-06 21:56:59 · 1556 阅读 · 0 评论 -
图的深度优先遍历--城市地图
//题目:第一行第一个数n表示城市个数(1~n),第二个数m表示公路个数//接下来有m行数据表示c到d有e千米,每条公路都是单行的,求1到n的最短路径#include int book[100];int a[100][100];int min=10000;int n;int dfs(int cur,int step);int main() {原创 2015-07-07 22:50:00 · 1157 阅读 · 0 评论 -
Bellman-Ford的队列优化
//Bellman--Food解决负权边//第一行读入n代表有1到n个节点,m表示有m个关系式//接下来m行u[i],v[i],w[i],分别表示起点,终点,和之间的距离,求1到其余各店的最短距离。#include int main() { int u[101],v[101],w[101],dis[101]; int i,j,k,n,m,flag;原创 2015-07-14 18:55:40 · 939 阅读 · 0 评论 -
普里姆算法
普里姆算法:每次寻找一条权值较少,且一个顶点在集合内,另一个不在集合内的边,添加到集合内,因为该点的添加导致其余dis[i]储存的非生成树点到生成树的距离改变,如果其余非生成树点到该点的距离比原来缩短了,那就改变dis[i]的值.#include int main(){ int dis[101]; int book[101]; int a[101][101]; in原创 2015-07-21 22:15:23 · 799 阅读 · 0 评论 -
二分图最大匹配
#include int book[101];int match[101];int a[101][101];int n;int dfs(int i); int main() { int i,j,m,b,c,sum; scanf("%d%d",&n,&m); for (i=1;i { scanf("%原创 2015-07-21 22:00:35 · 310 阅读 · 0 评论 -
二叉搜索树
#include #include typedef struct node{ int element; struct node* Lchild,*Rchild;}node;typedef struct tree{ struct node *root;}tree;node * creat(tree *a){ a->roo原创 2015-08-15 12:20:50 · 288 阅读 · 0 评论 -
图的割边
//图的割边定义与图的割点类似,即去掉某条边之后,剩余的顶点之间不能相互之间到达,其实质就是将公式里的low[v]>=num[u]的等号去掉,因为"="说明能到//父节点,而父节点是被去掉的(不包含在剩余的点里),所以哪怕“=”也成立,而割边就是连父节点都到不了,所以改成low[v]>num[u]//另外值得注意的是在割点中,有一种特殊情况就是根节点之下只有一个子节点,这样不是割点,但它属原创 2015-07-24 21:20:49 · 1308 阅读 · 0 评论 -
网络流之最大流(关于poj1273)
//poj1273,网络流之最大流主要概念://1,源点,即整个图遍历的起点,POJ1273中是1,注意它只流出,不流入//2.汇点,即终点POJ1273中为读入的下标,注意它只流入不流出。//3.容量,即从一点到另一点的最大流量,上限值//4.最大流问题就是知道源点,汇点,每一条边的容量,求从源点到汇点的最大流量//5.残余网络:针对每条边的流量,就是每一条边还剩余的流量,正原创 2015-09-06 12:46:48 · 451 阅读 · 0 评论 -
无向图的欧拉回路和欧拉通路
//首先我认为需要区分的概念是欧拉回路和欧拉通路(算法竞赛入门经典中是欧拉道路),//无向图://欧拉回路,即从无向图的一个节点出发每条边仅经过一次后,可以回到起点的一条回路//判断方法:1.该无向图连通,这步bfs一次即可2.每个点的度数是偶数//欧拉通路(欧拉道路),即从无向图的一个节点走出一条道路,每条边恰好经过一次(即不一定要返回起点)//判断方法1.该无向图连通2.每原创 2015-08-01 21:09:33 · 5924 阅读 · 0 评论 -
图的割边
//图的割边定义与图的割点类似,即去掉某条边之后,剩余的顶点之间不能相互之间到达,其实质就是将公式里的low[v]>=num[u]的等号去掉,因为"="说明能到//父节点,而父节点是被去掉的(不包含在剩余的点里),所以哪怕“=”也成立,而割边就是连父节点都到不了,所以改成low[v]>num[u]//另外值得注意的是在割点中,有一种特殊情况就是根节点之下只有一个子节点,这样不是割点,但它属原创 2015-07-27 20:41:31 · 508 阅读 · 0 评论 -
求逆序对
//逆序对定义:设a[0..n-1]是一个包含n个不同数的数组,那么如果ia[j]则称(i,j)为一对逆序对//逆序对的归并排序的求法:归并排序先将[start,end]内的元素分成[start,middle]和[middle+1,end],然后再不断细分直到只剩一个元素(此时自然有序),然后就是合并//而在合并过程中可以顺手求出逆序对,方法是:首先[start,middle]和[midd原创 2015-08-15 21:40:12 · 429 阅读 · 0 评论 -
克鲁斯卡尔算法
//每次选择最短的边,同时保证边的两个端点并不相连(判断相连可用并查集),之前先排序typedef struct s{ int a; int b; int c;}s;s w[101];int pre[101];int find(int i){int temp,j=i;while (pre[i]!=i){ i=pr原创 2015-07-16 19:54:01 · 607 阅读 · 0 评论 -
拓扑排序
//拓扑排序关键在于一个入度,首先说明入度的作用,这就好比学科A,入度就是到这门学科的边的条数,如果到这门学科为0了,就说明不需要先学什么//那么自然就要学习这门学科,然后再将与这门学科相连的其他学科的入度减一,因为他们原来入度(即边的条数包含A学科到自己的边,现在A学科学过了,自然少了一个障碍,//而如果此时正好该门学科入度变成0了,那么又可以学习该门学科~~//入度的求法:从上文可原创 2015-08-01 12:33:51 · 368 阅读 · 0 评论 -
图的深度优先搜索
图的深度优先遍历是优先沿着某一条分支遍历,按照某种顺序(比如文中是按照从编号小节点到编号大节点),访问该分支的所有子节点然后回溯,沿着另一条分支做同样的操作.如图按照深度优先搜索的顺序为1-2-4-3-5现在在第一行输入n(1~n节点),m个关系式接下来输入m行关系式,表示c,d相连,要求输出深度优先搜索的顺序~~#include void dfs(原创 2015-07-06 21:46:54 · 1097 阅读 · 0 评论 -
Bellman-Ford算法
//Bellman--Food解决负权边//第一行读入n代表有1到n个节点,m表示有m个关系式//接下来m行u[i],v[i],w[i],分别表示起点,终点,和之间的距离,求1到其余各店的最短距离。#include int main() { int u[101],v[101],w[101],dis[101]; int i,j,k,n,m,flag;原创 2015-07-14 18:35:25 · 401 阅读 · 0 评论