頂點入度演算法
//思路:先把鄰接表轉換成逆鄰接表,這樣問題簡單多了。
//數組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]++;
}