顶点入度算法
//思路:先把邻接表转换成逆邻接表,这样问题简单多了。
//数组out,保存各节点的入度
void countindegree(AdjList gin, AdjList gout)
{
//设有向图有n个顶点,建逆邻接表的顶点向量。
for (int i=1;i<=n;i++)
{
gin[i].vertex=gout[i].vertex;
gin.firstarc=null;
}
//邻接表转为逆邻接表。
for (i=1;i<=n;i++)
{
p=gout[i].firstarc;//取指向邻接表的指针。
while (p!=null)
{
j=p->adjvex;
s=(ArcNode *)malloc(sizeof(ArcNode));//申请结点空间。
s->adjvex=i;
s->next=gin[j].firstarc;
gin[j].firstarc=s;
p=p->next;//下一个邻接点。
}//while
}//endof for
//统计各节点的入度
for (i=0; i<n; i++)
{
p = gin[i].firstarc;
while(p ! = null)
{
out[i]++;
p = p->next;
} //endof while
} //endof for
}//endof function
Ⅱ 离散数学:图中顶点a的入度和出度分别是什么
答:图中顶点a的入度是1,出度是4。
具体原因:这张图是有向图,一个顶点的入度是以这个顶点为终点的有向边的数量;一个顶点的出度是以这个顶点为起点的有向边的数量。在图中,以顶点a为终点的有向边只有e1,所以a的入度是1;以顶点a为起点的有向边有e1,e2,e3,e4,所以a的出度是4。
提醒:图中e1是自环,e2、e3是重边,它们都应当参与入度、出度的计算,不应该忽略。
Ⅲ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是
第j列元素之和
Ⅳ 有向图求顶点出入度和最短路径Dijksatra算法。运行的出入度和求最短距离都有问题,请问出错在哪里
错在2处,一个图的初始化上,边的初始值应该是无穷INF
G.edges[i][j]=0;改成G.edges[i][j]=INF;
另外一个是函数outG显示邻接矩阵里,如果是INF则显示∞
Ⅳ 数据结构 求有向图中每个顶点的出度和入度的算法
正好在做,搜半天没有解说,
入度:能够进入当前顶点的个数
出度:当前顶点的最大长大。
Ⅵ 什么是出度和入度是哪类算法或数据结构中的
图算法。详细的可以搜索。下面是摘自网络:
图中的度:所谓顶点的度(degree),就是指和该顶点相关联的边数。
在有向图中,度又分为入度和出度。
入度 (in-degree) :以某顶点为弧头,终止于该顶点的弧的数目称为该顶点的入度
出度 (out-degree) :以某顶点为弧尾,起始于该顶点的弧的数目称为该顶点的出度
Ⅶ n个顶点e条边的图G用邻接表存储,则求每个顶点入度的时间复杂度为查了好几个地方的答案,答案大部分
O(n+e)是对的,O(n*n)是用邻接矩阵存储时的时间复杂度。
算法就是遍历每一条边,然后把每条边的终点的入度+1.
在邻接表中,就是要依次访问每个顶点,然后在每个顶点中依次访问每条边,把这些边的终点的入度+1。也就是每个顶点和每条边依次要各访问一遍,所以时间复杂度是O(n+e)。
在邻接矩阵中,算法需要遍历邻接矩阵的每一个点,而邻接矩阵有n*n个点,所以时间复杂度是O(n*n)。
有什么不懂的可以追问。
Ⅷ 编写算法,求有向图中各定点的入度
先是根据邻接表的顶点个数n,创建一个int型的数组a[n](用来存储各顶点的入度),把a[n]中的每一项置为0。然后再邻接表遍历一下就行了,先是顶点遍历,然后弧遍历。
我大致写一下算法。
#define n 30;
struct diagraph
{
struct vertex * head;
struct Vertex ver;
struct Edge edg;
}
struct Vertex
{
int pos;
Vertex * nextVertex;
Edge * firstEdge;
};
struct Edge
{
int pos;
Edge * nextEdge;
Vertex * endPoint;//弧尾指向结点的指针
}
void main()
{
struct digraph a;
//先是邻接表的建立,我就不写了,建立完之后如下
int a[n];
int i,j;
struct Vertex * current = a.head;
struct Edge * eCurrent;
for(i=0;i<n;i++)
{
eCurrent=current->firstEdge;
while(eCurrent!=0)
{
a[eCurrent->pos]++;
eCurrent=eCurrent->nextEdge;
}
current = current->nextVertex;
}
}
我直接在知道上面写的,只是个大概,能看懂的话就给个分吧
Ⅸ c语言怎么统计一个图每个顶点的度数
假设不带权有向图采用邻接矩阵 g 存储,设计实现以下功能的算法:
(1) 求出图中每个顶点的入度。
(2) 求出图中每个顶点的出度。
(3) 求出图中出度为0 的顶点数。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define INFINITY 65535
#define MAX_VERTEX_NUM 100
typedef char VertexType;
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; //顶点数组
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵
int v, e; //图顶点和边的数量
} MGraph;
int num=0; 全局变量负责统计出度为0的顶点个数
void CreateMGraph(MGraph &G)
{
int i,j,k,w;
printf("输入顶点数和边数:\n");
scanf("%d%d",&G.v,&G.e);
//for(i=0;i<G.v;i++)
//scanf("%c",G.vexs[i]);
for(i=0;i<G.v;i++)
for(j=0;j<G.v;j++)
G.arcs[i][j]=INFINITY; //初始化邻接矩阵
for(k=0;k<G.e;k++)
{
printf("输入边(i,j)上的下标i,j和权w\n");
scanf("%d%d%d",&i,&j,&w);
G.arcs[i][j]=w;
}
}
void in(MGraph G)
{
int n=0;
printf("入度:\n");
Ⅹ 数据结构 求图中各顶点的入度 急!!!
for(int i=0;i<n;i++) degree[i]=0;
for(int i=0;i<n;i++) {
for(list *p=l[i];p!=NULL;p=p->next) degree[p->to]++;
}