亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? graph.h

?? 求圖的強連通分支
?? H
字號:
#ifndef GRAPH_H
#define GRAPH_H
#include"SqStack.h"
#include"sort.h"
#include<iostream.h>
#include<stdlib.h>
#include<fstream.h>
template<class VertexType,class EdgeType>class Graph;
template<class VertexType,class EdgeType>class Vertex;
template<class VertexType,class EdgeType>class Edge{
friend class Graph<VertexType,EdgeType>;
public:
	Edge(Vertex<VertexType,EdgeType>*d,EdgeType c,Edge<VertexType,EdgeType> *q):
	dest(d),cost(c),link(q){};
private:
	Vertex<VertexType,EdgeType> * dest;
	EdgeType cost;
	Edge<VertexType,EdgeType> *link;
};

template<class VertexType,class EdgeType>class Vertex{
friend class Edge<VertexType,EdgeType>;
friend class Graph<VertexType,EdgeType>;
public:
	Vertex(VertexType d,Vertex<VertexType,EdgeType>*p, Edge<VertexType,EdgeType>*q):
	  data(d),next(p),adj(q),ve(0),vl(0){}
private:
	int tag;
	VertexType data;
	EdgeType ve;
	EdgeType vl;
	Vertex<VertexType,EdgeType> *next;
	Edge<VertexType,EdgeType>* adj;
	int DFS_Number;
	int Component;
   int High;
};

template<class VertexType,class EdgeType>
class Graph{
private:
	Vertex<VertexType,EdgeType> *head;
	int NumVertex;
	int NumStrong;
	int NumEdge;
	const VertexType Vertex_finish_flag;
	const EdgeType Edge_finish_flag;
public:
	Graph(VertexType flag,EdgeType tag);
	~Graph();
	int GraphEmpty()const {return NumVertex==0;}
	void DFS_Traveling(const VertexType & start);
	int NumofVertex()const{return NumVertex;}
	VertexType Getvalue(Vertex<VertexType,EdgeType>*p)
	{return p?p->data:0;}
	void InsertVertex(const VertexType &vertex);
	void InsertEdge(Vertex<VertexType,EdgeType> *v1,Vertex<VertexType,EdgeType> *v2,EdgeType weight);
	void RemoveVertex(const VertexType & vertex);
	void RemoveEdge(Vertex<VertexType,EdgeType> *v1,Vertex<VertexType,EdgeType> *v2);
	EdgeType GetWeight(Vertex<VertexType,EdgeType> *v1,Vertex<VertexType,EdgeType>*v2);
	Vertex<VertexType,EdgeType> *GetFirstNeighbor(const Vertex<VertexType,EdgeType> *v);
	Vertex<VertexType,EdgeType> *GetNextNeighbor(Vertex<VertexType,EdgeType>*v1,Vertex<VertexType,EdgeType>*v2);
	Vertex<VertexType,EdgeType>* GetVertexPos(const VertexType & vertex);
	void CreateGraph(VertexType a[],int n);
	void InsertEdge(VertexType u,VertexType v);
	void StronglyConnectedComponents();
	//v為圖的一個節點,作為DFS樹的根,n為圖G 的節點數
	void SCC(Vertex<VertexType,EdgeType>* p,int *DFS_N,int *Current_Component,Stack<Vertex<VertexType,EdgeType>*> *s);
	void OutputComponent();
};

template<class VertexType,class EdgeType>
void Graph<VertexType,EdgeType>::OutputComponent(){
	char outFileName[]="result4.txt";
	ofstream outFile;
	outFile.open(outFileName);
	if(!outFile.is_open()){
	cout<<"File open error!"<<endl;
	cout<<"opration is ter!"<<endl;
	exit(EXIT_FAILURE);
	}
	 Vertex<VertexType,EdgeType> *p;
	 for(p=head;p!=NULL;p=p->next)
		cout<<p->data<<" :   "<<p->Component<<endl;
     int * Array=new int[NumStrong+1];
	 int *Array1=new int[NumStrong+1];
	 for(int i=1;i<NumStrong+1;i++){
	 Array[i]=0;
	 }
	 bool m_bPrint=false;
	 for(p=head;p!=NULL;p=p->next)
	 Array[p->Component]++;
for(i=1;i<NumStrong+1;i++)
Array1[i]=Array[i];
int temp;
	 MergeSort(Array1,NumStrong);
	 outFile<<NumStrong<<endl;
	 for(i=1;i<=NumStrong ;i++){
		 if(Array1[i]==Array1[i-1])continue;
		 for(int j=1;j<NumStrong+1;j++){
			 if(Array[j]==Array1[i]){
		 for(p=head;p!=NULL;p=p->next){
			 if(p->Component==j){
				 outFile<<p->data<<"   ";
		 m_bPrint=true;}}	
		 if(m_bPrint)outFile<<endl;
		 m_bPrint=false;}}
	}
	
}

template<class VertexType,class EdgeType>
void Graph<VertexType,EdgeType>::SCC(Vertex<VertexType,EdgeType>* p,int* DFS_N,
									 int *Current_Component,Stack<Vertex<VertexType,EdgeType>*> *s){
p->DFS_Number=(*DFS_N);
(*DFS_N)--;
s->Push(p);
p->High=p->DFS_Number;
Vertex<VertexType,EdgeType> *w;
Edge<VertexType,EdgeType> *q1;
for(q1=p->adj;;q1=q1->link){
	if(q1->dest->DFS_Number==0){
		SCC(q1->dest,DFS_N,Current_Component,s);
		p->High=p->High>=q1->dest->High?p->High:q1->dest->High;
	}
	else{
	if(q1->dest->DFS_Number>p->DFS_Number && q1->dest->Component==0)
		p->High=p->High>q1->dest->DFS_Number?p->High:q1->dest->DFS_Number;}
		if(q1->link==NULL)break;}
	if(p->High==p->DFS_Number)
	{(*Current_Component)++;
	  NumStrong++;
	do{w=s->Top();
	s->Pop();
	w->Component=(*Current_Component);}while(w!=p);}


}

template<class VertexType,class EdgeType>
void Graph<VertexType,EdgeType>::StronglyConnectedComponents(){
     Vertex<VertexType ,EdgeType> *p;
Stack<Vertex<VertexType,EdgeType>*> s(NumVertex);
	 for(p=head;;p=p->next){
	 p->DFS_Number=0;
	 p->Component=0;
	 if(p->next==NULL)break;
	 }
	 int Current_Component=0;
int	 DFS_N=NumVertex;
	 for(p=head;p->next!=NULL;p=p->next){
	 if(p->DFS_Number==0)
		 SCC(p,&DFS_N,&Current_Component,&s);
	 }

}

template<class VertexType,class EdgeType>
void Graph<VertexType,EdgeType>::InsertEdge(VertexType v ,VertexType u){
Vertex<VertexType,EdgeType> *p,*q;
Exception(!(p=GetVertexPos(v)),"It is NULL!");
Exception(!(q=GetVertexPos(u)),"It is NULL!");
p->adj=new Edge<VertexType,EdgeType>(q,1,p->adj);
Exception(!p->adj,"Fail on memory!");
NumEdge++;
}

template<class VertexType ,class EdgeType>//創建頂點
void Graph<VertexType,EdgeType>::CreateGraph(VertexType a[],int n){
head=NULL;
for(int i=0;i<n;i++){
	head=new Vertex<VertexType,EdgeType> (a[i],head,NULL);
Exception(!head,"Head is NULL");
NumVertex++;
}
}


template<class VertexType,class EdgeType>
Graph<VertexType,EdgeType>::Graph(VertexType flag,EdgeType tag):Vertex_finish_flag(flag),Edge_finish_flag(tag){
	NumVertex=0;
	NumEdge=0;
	NumStrong=0;
}

template<class VertexType,class EdgeType>
Graph<VertexType,EdgeType>::~Graph(){
Vertex<VertexType,EdgeType> *p,*m;
Edge<VertexType,EdgeType> *q;
p=head;
while(p){
	while(q=p->adj){p->adj=q->link;delete q;}
	m=p;p=p->next;delete m;
}
}

template<class VertexType,class EdgeType>
Vertex<VertexType,EdgeType> *Graph<VertexType,EdgeType>::GetVertexPos(const VertexType & vertex){
Vertex<VertexType,EdgeType>* p;
p=head;
while(p){if(p->data==vertex)return p;p=p->next;}
return NULL;
}

template<class VertexType,class EdgeType>
Vertex<VertexType,EdgeType>* Graph<VertexType,EdgeType>::GetFirstNeighbor(const Vertex<VertexType,EdgeType>*v){
Edge<VertexType,EdgeType> *p;
if(v1 && v2){p=v1->adj;if(!p)return NULL;}else return NULL;
while(p){if(p->dest==v2 && p->link!= NULL)return p->link->dest;p=p->link;}
return NULL;
}

template<class VertexType,class EdgeType>
EdgeType Graph<VertexType,EdgeType>::GetWeight(Vertex<VertexType,EdgeType>*v1,Vertex<VertexType,EdgeType> *v2){
Edge<VertexType,EdgeType> *p;
if(v1 && v2){p=v1->adj;if(!p)return 0;}else return 0;
while(p){if(p->data==v2)return p->cost;p=p->link;}
return 0;
}


template<class VertexType,class EdgeType>
void Graph<VertexType,EdgeType>::DFS_Traveling(const VertexType& start){
Stack<Edge<VertexType,EdgeType>*>s (NumEdge);
Vertex<VertexType,EdgeType> *p,*m;
Edge<VertexType,EdgeType>* q;
p=head;
while(p){p->tag=0;p=p->next;}
p=GetVertexPos(start);
if(!p){cout<<"Start vertex is error"<<endl;return;}
int finished=0;
while(p){
	if(p->tag==0){
	p->tag=1;
	cout<<"visit vertex data"<<p->data<<endl;
	if(p->adj)s.Push(p->adj);
	while(!s.IsEmpty()){
	q=s.Top();s.Pop();
	if(q->link) s.Push(q->link);
	m=q->dest;
	if(m->tag==0){m->tag=1;
	cout<<"visited vertex data:"<<m->data<<endl;
	if(m->adj)s.Push(m->adj);}
	}
	}
	p=p->next;if(!p&& !finished){p=head;finished=1;}
}return;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一卡二卡三卡四卡无卡| 日韩高清一区在线| 91.xcao| 色综合天天综合网天天狠天天| 在线观看三级视频欧美| 日本免费新一区视频| 亚洲另类在线制服丝袜| 中文字幕一区二区三区视频 | 五月天欧美精品| 亚洲精品免费看| 一区二区激情小说| 亚洲综合999| 日韩av中文在线观看| 蜜桃视频在线观看一区二区| 午夜精品一区在线观看| 午夜亚洲福利老司机| 日本色综合中文字幕| 久久99久久精品| 国产夫妻精品视频| av一区二区三区| 91国产丝袜在线播放| 日韩视频免费观看高清完整版在线观看 | 久久se精品一区精品二区| 紧缚捆绑精品一区二区| 免费高清成人在线| 日韩精品一区二区三区四区| 91精品国产综合久久香蕉麻豆| 久久综合狠狠综合| 亚洲嫩草精品久久| 国产在线日韩欧美| 欧美一级日韩一级| 欧美一区二区三区免费视频| 中文在线资源观看网站视频免费不卡| 日韩va亚洲va欧美va久久| 中文字幕av一区二区三区免费看 | 99久久精品免费看国产免费软件| www.av精品| 一区二区三区四区中文字幕| 亚洲综合丝袜美腿| 福利视频网站一区二区三区| 成人三级在线视频| 免费在线观看日韩欧美| 久久九九国产精品| 国产一区二区三区| 一区二区在线看| 亚洲免费在线视频一区 二区| 国产精品精品国产色婷婷| 7777女厕盗摄久久久| 国产精品国产三级国产专播品爱网| 亚洲一区二区三区四区五区中文| 国产精品亚洲视频| 久久久高清一区二区三区| 91视频国产观看| 欧美国产综合一区二区| 成人激情av网| 亚洲大尺度视频在线观看| 日本丶国产丶欧美色综合| 一本色道综合亚洲| 亚洲国产精品一区二区久久 | 美女脱光内衣内裤视频久久网站| 欧美日韩久久久久久| 亚洲成人自拍偷拍| 欧美精品日韩一本| 麻豆91免费观看| 亚洲少妇最新在线视频| 欧美r级电影在线观看| 色婷婷久久综合| 国产成人午夜视频| 专区另类欧美日韩| 日韩久久久久久| 国产一区二区三区免费| 久久久久成人黄色影片| 欧美午夜电影网| 久久国内精品自在自线400部| 亚洲欧美日韩国产中文在线| 欧美在线观看视频一区二区| 国产精品国产三级国产专播品爱网 | 久久99精品久久久| 欧美tk—视频vk| 国产欧美在线观看一区| 亚洲精品福利视频网站| 精品国产免费一区二区三区四区| 欧美一区二区三区视频| 一区二区三区在线观看国产| 99re在线精品| 亚洲欧美日韩中文播放| 色天使色偷偷av一区二区| 亚洲欧美激情在线| 欧美人动与zoxxxx乱| 肉色丝袜一区二区| 欧美变态凌虐bdsm| 成人精品亚洲人成在线| 国产精品久久久久久久第一福利| 9i在线看片成人免费| 亚洲欧美日韩在线不卡| 337p亚洲精品色噜噜狠狠| 久久成人免费网站| 综合激情成人伊人| 欧美美女网站色| 国产精品一区一区三区| 成人免费一区二区三区视频| 精品视频色一区| 国产美女在线精品| 亚洲欧美另类在线| 欧美一二三区在线| 99久久国产综合精品色伊| 天堂资源在线中文精品| 国产欧美一区二区精品秋霞影院 | 午夜精品久久久久久久久久| 日韩一级二级三级精品视频| 国产成人在线看| 视频在线在亚洲| 国产精品美女久久久久av爽李琼| 欧美中文一区二区三区| 国产一区二区不卡老阿姨| 亚洲欧美日韩综合aⅴ视频| 精品剧情v国产在线观看在线| 97久久人人超碰| 精品一区二区免费视频| 亚洲夂夂婷婷色拍ww47| 久久亚洲私人国产精品va媚药| 在线视频国内一区二区| 国产精品456| 捆绑调教一区二区三区| 一区二区三区日韩精品视频| 久久青草欧美一区二区三区| 欧美伦理视频网站| 一本色道久久综合亚洲aⅴ蜜桃| 免费在线看一区| 亚洲综合男人的天堂| 国产精品网站在线观看| 精品成人一区二区| 7777精品伊人久久久大香线蕉完整版| 99久久精品国产一区二区三区| 国产在线精品一区二区不卡了| 视频一区中文字幕国产| 亚洲精品成人天堂一二三| 国产午夜精品久久久久久免费视 | 国产suv精品一区二区三区| 天天综合色天天综合色h| 成人免费在线播放视频| 国产精品网站在线播放| 国产丝袜美腿一区二区三区| 亚洲精品一区二区三区福利| 91精品国产欧美一区二区成人| 91国在线观看| 欧美日韩在线播| 色欧美日韩亚洲| 欧美午夜在线观看| 欧美日韩中文字幕一区二区| 在线观看视频一区二区| 欧美日韩在线三区| 51精品秘密在线观看| 欧美一区二区私人影院日本| 3d动漫精品啪啪1区2区免费 | 成人永久看片免费视频天堂| 国精品**一区二区三区在线蜜桃| 老司机精品视频一区二区三区| 麻豆精品在线播放| 国产一区二区不卡| www.欧美日韩| 在线看国产日韩| 欧美一区二区三区视频在线观看| 欧美日韩一本到| 制服丝袜日韩国产| www久久精品| 亚洲欧洲日韩av| 亚洲制服丝袜在线| 久久99精品久久只有精品| 国产成人午夜精品5599| 91美女在线看| 欧美一区二区三级| 国产欧美一区二区三区鸳鸯浴| 日韩毛片精品高清免费| 午夜欧美一区二区三区在线播放| 日av在线不卡| 成人性视频网站| 欧美蜜桃一区二区三区| 精品久久久久99| 亚洲欧美视频在线观看| 偷拍自拍另类欧美| 国产91高潮流白浆在线麻豆| 在线亚洲人成电影网站色www| 91精品综合久久久久久| 欧美激情一区二区三区在线| **欧美大码日韩| 看国产成人h片视频| 91麻豆精品一区二区三区| 91精品久久久久久蜜臀| 国产日产欧美一区| 亚洲成人手机在线| 国产电影一区二区三区| 欧美日韩中文另类| 中文字幕的久久| 日韩成人一级大片| 99久久精品免费观看| 久久综合九色综合97_久久久| 亚洲黄色免费网站| 丰满放荡岳乱妇91ww| 欧美一区二区啪啪|