時 限:
2000 ms
記憶體限制:
5000 k
總時限:
3000 ms
描述:以鄰接矩陣給出一張以整數為結點的有向圖,其中0表示不是相鄰結點,1表示兩個結點相連且由當前結點為初始點。利用拓撲排序判斷圖中是否有環,若有輸出yes沒有輸出no
輸入:結點數
鄰接矩陣
輸出:yes/no
輸入樣例:
3
0 1 0
1 0 1
1 0 0
輸出樣例:
yes
/
//編譯環境 codeblocks,gcc
#include #include #define maxvertexnum 100//最大頂點數
#define ok 1
#define error 0
int visited[maxvertexnum];
typedef int vertextype;//頂點型別
棧定義/
//鏈棧的節點
typedef struct _stacknode
stacknode;
//棧typedef struct _stack
stack;
//初始化棧
void initstack(stack &s)
//棧判空
bool isempty(stack &s)
//入棧
void push(stack &s, int num)
//出棧
bool pop(stack &s,int &e)
}//銷毀棧
void destroystack(stack &s)
}鄰接矩陣定義
typedef struct
arccell;
typedef struct
mgragh;
///鄰接表定義//
//弧(邊)結點
typedef struct _arcnode
arcnode;
//頂點結點
typedef struct _vnode
vnode;
//鄰接表定義
typedef struct _adjlist
adjlist;
//由鄰接矩陣得到鄰接表
adjlist *mgragh2adjlist(mgragh &m)
}// g->arcnum=m.
arcnode *p;
for(i=0;ivertex[i].data=i;
g->vertex[i].firstarc=null;
g->vertex[i].indegree=0;
}for(i=0;iadjvex=j;
p->nextarc=g->vertex[i].firstarc;
g->vertex[i].firstarc=p;
g->vertex[j].indegree++;}}
return g;
}//void displaygraph(adjlist *g)
//// printf("\n");
// }
//}int toplogicalsort(adjlist *g)
while(!isempty(s))
//for
}//while
if(countvexnum)
else
;}//main
int main()
for(i=0;ifor(j=0;jadjlist *g=mgragh2adjlist(m);
//displaygraph(g);printf("\n");
toplogicalsort(g);
// stack s;
// initstack(s);
// destroystack(s);
return 0;
}
AOV網 拓撲排序
aov網路 拓撲排序 前面說了兩個有環的應用 有環 最小生成樹 普利姆演算法,克魯斯卡爾演算法 有環 最短路徑 迪傑斯特拉演算法,弗洛伊德演算法 現在我們說下沒環的圖 在乙個有向圖中,用頂點表示活動,用邊表示頂點活動之間的優先關係,這樣的網我們叫aov網 activity on vertex net...
AOV網 拓撲排序
aov網路 拓撲排序 前面說了兩個有環的應用 有環 最小生成樹 普利姆演算法,克魯斯卡爾演算法 有環 最短路徑 迪傑斯特拉演算法,弗洛伊德演算法 現在我們說下沒環的圖 在乙個有向圖中,用頂點表示活動,用邊表示頂點活動之間的優先關係,這樣的網我們叫aov網 activity on vertex net...
AOV網拓撲排序 c c
工程是否順序進行,流程是否合理,採用aov網來表示,頂點用來表示工程 活動 弧表示工程間的順序關係。如a有乙個指向b的弧,意味著a結束了b才能開始 a為弧尾,b為弧頭 演算法思路 1,在有向圖中找到無前驅 入度為0 的結點v,輸出。2,刪除v及以v為弧尾的弧。3,重複1,2,輸出全部結點 或者網中沒...