国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

有向圖的拓?fù)渑判?/h1>

這篇具有很好參考價值的文章主要介紹了有向圖的拓?fù)渑判?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

拓?fù)渑判?/span>。任意給定一個有向圖,設(shè)計(jì)一個算法,對它進(jìn)行拓?fù)渑判颉M負(fù)渑判蛩惴ㄋ枷耄篴.在有向圖中任選一個沒有前趨的頂點(diǎn)輸出;b.從圖中刪除該頂點(diǎn)和所有以它為尾的弧;c.重復(fù)上述a、b,直到全部頂點(diǎn)都已輸出,此時,頂點(diǎn)輸出序列即為一個拓樸有序序列;或者直到圖中沒有無前趨的頂點(diǎn)為止,此情形表明有向圖中存在環(huán)。?

拓?fù)渑判蛩惴ㄋ枷耄?/p>

  1. 在有向圖中任選一個沒有前趨的頂點(diǎn)輸出;
  2. 從圖中刪除該頂點(diǎn)和所有以它為尾的?。?/li>
  3. 重復(fù)上述1、2、直到全部頂點(diǎn)都已輸出,此時,頂點(diǎn)輸出序列即為一個拓樸有序序列;或者直到圖中沒有無前趨的頂點(diǎn)為止,此情形表明有向圖中存在環(huán)。

拓?fù)渑判?/span>算法偽代碼如下:?

1. 棧S初始化;累加器count初始化;

2. 掃描頂點(diǎn)表,將沒有前驅(qū)(即入度為0)的頂點(diǎn)壓棧;

3. 當(dāng)棧S非空時循環(huán)

????3.1 vj=退出棧頂元素;輸出vj;累加器加1;

3.2 將頂點(diǎn)vj的各個鄰接點(diǎn)的入度減1;

3.3 將新的入度為0的頂點(diǎn)入棧;

4. if (count<vertexNum)?輸出有回路信息;

代碼如下:

#include <stdio.h>
#include <stdlib.h>
#define MAXV 100
#define INF 10000

typedef struct
{
	int data[MAXV];
	int top;
}SqStack;

typedef struct ANode
{
	int adjvex;
	struct ANode *nextarc;
	int weight;
}ArcNode;

typedef struct
{
	int adjvex;
	int count;
	ArcNode *firstarc;

}VNode;

typedef struct
{
	VNode adjlist[MAXV];
	int n,e;
}AdjGraph;

void CreateAdj(AdjGraph *&G,int A[MAXV][MAXV],int n,int e)
{
	int i,j;
	ArcNode *p;
	G=(AdjGraph*)malloc(sizeof(AdjGraph));
	for(i=0;i<n;i++)
    G->adjlist[i].firstarc=NULL;
	for(i=0;i<n;i++) 
	    for(j=n-1;j>=0;j--)
	    if(A[i][j]!=0&&A[i][j]!=INF)
		{
			p=(ArcNode*)malloc(sizeof(ArcNode));
			p->adjvex =j;
			p->weight =A[i][j];
			p->nextarc=G->adjlist[i].firstarc;
			G->adjlist[i].firstarc =p;  
		 } 
		 G->n =n;
		 G->e =e;
 } 

void DispAdj(AdjGraph *G)
 {
 	int i;
 	ArcNode *p;
 	for(i=0;i<G->n ;i++)
 	{
 		p=G->adjlist[i].firstarc;
 		printf("%3d:",i);
 		while(p!=NULL)
 		{
 			printf("%3d[%d]->",p->adjvex,p->weight);
 			p=p->nextarc ;
		 }
		 printf("^\n");
	 }
 }
 
void DestoryAdj(AdjGraph *&G)
{
	int i;ArcNode *pre,*p;
	for(i=0;i<G->n ;i++)
	{
		pre=G->adjlist [i].firstarc;
		if(pre!=NULL)
		{
			p=pre->nextarc ;
			while(p!=NULL)
			{
					free(pre);
					pre=p;
					p=p->nextarc ;
				}
				free(pre);
			}
		}
		free(G);
		
	
}

void InitStack (SqStack *&s)
{
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top =-1;
}

void DestoryStack(SqStack *&s)
{
	free(s);
}

void TopSort(AdjGraph *G)
{
	int i,j,flag=0;
	int a[MAXV];
	int St[MAXV],top=-1;
	ArcNode *p;
	for(i=0;i<G->n;i++)
	G->adjlist [i].count =0;
	for(i=0;i<G->n;i++)
	{
		p=G->adjlist [i].firstarc;
		while(p!=NULL)
		{
			G->adjlist [p->adjvex ].count++;
			p=p->nextarc ;
		}
	}
	for(i=0;i<G->n;i++)
	{
		if(G->adjlist [i].count==0)
		{
			top++;
			St[top]=i;
		}
	} 
	while(top>-1)
	{
		i=St[top];
		top--;
		a[flag++]=i;
		p=G->adjlist [i].firstarc;
		while(p!=NULL)
		{
			j=p->adjvex;
			G->adjlist [j].count--;
				if(G->adjlist [j].count==0)
				{
					top++;
					St[top]=j;
				}
				p=p->nextarc; 
					
		}
	}
		
	if(flag<G->n)
	    printf("該圖存在回路,不存在拓?fù)湫蛄?!\n");
	else
	{
		printf("該圖的拓?fù)湫蛄袨?");
		for(i=0;i<flag;i++)
		printf("%d",a[i]);
		printf("\n"); 
	}
	
}

int main()
{
	AdjGraph *G;
	int n=7;
	int e=8;
	int A[100][100]={{0,1},{0,0,1,0,0,1},{0,0,0,0,1},{0,0,1,0,1},{0},{0}};
	CreateAdj(G,A,n,e);
	printf("圖的鄰接表:\n");
	DispAdj(G);
	TopSort(G);
	printf("銷毀圖的鄰接表\n");
	DestoryAdj(G);
	return 0; 
}

有問題可以留言文章來源地址http://www.zghlxwxcb.cn/news/detail-490048.html

到了這里,關(guān)于有向圖的拓?fù)渑判虻奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 二十一、搜索與圖論——拓?fù)湫蛄校ㄓ邢驁D)

    二十一、搜索與圖論——拓?fù)湫蛄校ㄓ邢驁D)

    拓?fù)湫蛄卸x: 若一個由圖中所有點(diǎn)構(gòu)成的序列 A滿足:對于圖中的每條邊 (x,y),x在 A中都出現(xiàn)在 y之前,則稱 A是該圖的一個拓?fù)湫蛄小?人話: 始終滿足每條邊的起點(diǎn)在終點(diǎn)前面,從前指向后。 注意:如果在有向圖中構(gòu)成一個環(huán),則必定無法構(gòu)成拓?fù)浣Y(jié)構(gòu),也可以證明有向

    2024年02月04日
    瀏覽(20)
  • 哪些方法可以判斷出一個有向圖是否有環(huán)

    使用 深度優(yōu)先遍歷 ,若從有向圖上的某個頂點(diǎn)u出發(fā),在 DFS(u)結(jié)束之前出現(xiàn)一條從頂點(diǎn)v到u的邊,由于v在生成樹上是u的子孫,則圖中必定存在包含u和v的環(huán),因此深度優(yōu)先遍歷可以檢測一個有向圖是否有環(huán)。 拓?fù)渑判?時,當(dāng)某頂點(diǎn)不為任何邊的頭時才能加入序列,存在環(huán)時環(huán)中的

    2024年02月12日
    瀏覽(19)
  • 用go語言實(shí)現(xiàn)一個構(gòu)建有向圖的函數(shù),同時圖結(jié)構(gòu)的點(diǎn)和邊上都支持添加屬性

    當(dāng)然可以。下面是一個簡單的用Go語言實(shí)現(xiàn)的有向圖構(gòu)建函數(shù)的示例。這個圖結(jié)構(gòu)使用map來存儲,每個節(jié)點(diǎn)都由一個唯一的標(biāo)識符(id)表示,并且節(jié)點(diǎn)和邊都可以附加屬性。 go 這個示例代碼創(chuàng)建了一個有向圖,并添加了兩個節(jié)點(diǎn)(A和B)和一個從A到B的邊。每個節(jié)點(diǎn)和邊都有

    2024年01月20日
    瀏覽(20)
  • 有向圖的強(qiáng)連通分量

    對于一個有向圖,連通分量:對于分量中任意兩點(diǎn)u,v,必然可以從u走到v,且從v走到u. 強(qiáng)連通分量:極大連通分量。 求出強(qiáng)連通分量后,可以通過將強(qiáng)連通分量縮點(diǎn)的方式,將有向圖轉(zhuǎn)化成有向無環(huán)圖。 求強(qiáng)連通分量的方法:tarjan O(n+m),時間復(fù)雜度是線性的 1 . 采用dfs來遍歷整

    2024年02月10日
    瀏覽(18)
  • 公開游戲、基于有向圖的游戲

    公開游戲、基于有向圖的游戲

    目錄 〇,背景 一,公開游戲、策梅洛定理 1,公開游戲 2,策梅洛定理 3,非有向圖游戲的公開游戲 力扣?486. 預(yù)測贏家(區(qū)間DP) 力扣?877. 石子游戲(退化貪心) 力扣 1140. 石子游戲 II(二維DP) 力扣 1406. 石子游戲 III(數(shù)列DP) 力扣?1563. 石子游戲 V(區(qū)間DP) ?力扣 1686.

    2024年02月09日
    瀏覽(22)
  • 2023-04-09 有向圖及相關(guān)算法

    2023-04-09 有向圖及相關(guān)算法

    有向圖的的應(yīng)用場景 社交網(wǎng)絡(luò)中的關(guān)注 互聯(lián)網(wǎng)連接 程序模塊的引用 任務(wù)調(diào)度 學(xué)習(xí)計(jì)劃 食物鏈 論文引用 無向圖是特殊的有向圖,即每條邊都是雙向的 改進(jìn)Graph和WeightedGraph類使之支持有向圖 Graph類的改動 WeightedGraph類的改動 有些問題,在有向圖中不存在,或者我們通常不考

    2024年02月05日
    瀏覽(38)
  • 真題詳解(有向圖)-軟件設(shè)計(jì)(六十二)

    真題詳解(極限編程)-軟件設(shè)計(jì)(六十一) https://blog.csdn.net/ke1ying/article/details/130435971 CMM指軟件成熟度模型,一般1級成熟度最低,5級成熟度最高,采用更高級的CMM模型可以提高軟件質(zhì)量。 初始:雜亂無章。 可重復(fù)級:建立基本的項(xiàng)目管理過程和跟蹤費(fèi)用項(xiàng)。 已定義(確定)

    2024年02月01日
    瀏覽(22)
  • 有向圖的強(qiáng)連通分量算法

    有向圖的強(qiáng)連通分量算法

    有向圖的強(qiáng)連通分量算法 強(qiáng)連通分量定義 在有向圖中,某個子集中的頂點(diǎn)可以直接或者間接互相可達(dá),那么這個子集就是此有向圖的一個強(qiáng)連通分量,值得注意的是,一旦某個節(jié)點(diǎn)劃分為特定的強(qiáng)連通分量后,此頂點(diǎn)不能在其它子樹中重復(fù)使用,隱含了圖的遍歷過程和極大

    2024年02月06日
    瀏覽(28)
  • 有向圖的鄰接表和鄰接矩陣

    有向圖的鄰接表是一種常用的表示方法,用于表示圖中各個節(jié)點(diǎn)之間的關(guān)系。在有向圖中,每條邊都有一個方向,因此鄰接表中的每個節(jié)點(diǎn)記錄了該節(jié)點(diǎn)指向的其他節(jié)點(diǎn)。 具體來說,有向圖的鄰接表由一個由節(jié)點(diǎn)和它們的鄰居節(jié)點(diǎn)列表組成的集合構(gòu)成。對于每個節(jié)點(diǎn),鄰接表

    2024年02月22日
    瀏覽(16)
  • 使用顏色檢測有向圖中的循環(huán)

    使用顏色檢測有向圖中的循環(huán)

    給定一個有向圖,檢查該圖是否包含循環(huán)。如果給定的圖形至少包含一個循環(huán),您的函數(shù)應(yīng)返回 true,否則返回 false。 例子: ? 輸入: ?n = 4, e = 6? 0 - 1, 0 - 2, 1 - 2, 2 - 0, 2 - 3, 3 - 3? 輸出: 是? 解釋: ? ?

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包