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

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

?? graph.cpp

?? 用C實現樹和圖的相關算法
?? CPP
字號:
#include <stdio.h>
#include <malloc.h>
#include "list.h"
#include "string.h"
#include "poly.h"
#include "graph.h"
#include "queue.h"


graph newGraph(mystring name)
{
  graph g=(graph)malloc(sizeof(*g));
  g->graphName=name;
  g->vertices=newList();
  return g;
}



graphVertex newGraphVertex(poly ver)
{
	graphVertex v=(graphVertex)malloc(sizeof(*v));
	v->edges=newList();
	v->level=0;
	v->vInfo=ver;
	v->visitFlag=0; 
	v->x=0;
	v->y=0;
	return v;
}


graphEdge newGraphEdge(graphVertex start,graphVertex end)
{
	graphEdge e1=(graphEdge)malloc(sizeof(*e1));
	e1->eInfo=NULL;
	e1->from=start;
	e1->to=end;
	e1->eTpye=ORD;
	return e1;
}


void graphInsertVertex (graph g, poly x)
{
	graphVertex v=newGraphVertex(x);
	insertListTail(g->vertices,v);	
}


graphVertex searchGraphVertex(graph g,poly v)
{
	list l=g->vertices;
	l=l->next;
	while(l)
	{
		if(  ((graphVertex)(l->element))->vInfo==v)
			return (graphVertex)(l->element);
		l=l->next;
	}

	

	printf("\nSearch Failure\n");
	return NULL;
}



graphEdge searchEdge(graph g,poly start,poly end)
{
	graphVertex vFrom=searchGraphVertex(g,start);
	graphVertex vTo=searchGraphVertex(g,end);
	if(vFrom&&vTo)                             //兩個結點都存在
	{
		list l=vFrom->edges;
		l=l->next;
		while(l)
		{
			if(	!equalString((mystring)(((graphVertex)(l->element))->vInfo),(mystring)vTo))
				return (graphEdge)(l->element);
			l=l->next;
		}
	}

	return NULL;
}




void graphInsertEdge (graph g, poly from, poly to)
{
	graphVertex vFrom=searchGraphVertex(g,from);
	graphVertex vTo=searchGraphVertex(g,to);
	if(vFrom&&vTo)                               //兩個結點都存在
	{
		graphEdge e=newGraphEdge(vFrom,vTo);
		insertListTail(vFrom->edges,e);
	}
	else
		printf("\ninsert edge failure");

}




void graphInsertEdgeInfo (graph g, poly start, poly end, poly info)
{
	graphEdge e=searchEdge(g,start,end);
	if(e)
	{
		e->eInfo=info;
	}

	else
		printf("\nthe edge no exist\n");

}

void graphClear(graph p)
{
	list l=p->vertices;
	l=l->next;
	while(l)
	{
		graphVertex v=(graphVertex)(l->element);
		v->visitFlag=0;
		l=l->next;
	}

}

void graphDfsSub(graph g,graphVertex start)
{

	
	if(!start->visitFlag)
	{
		visitGraph(start->vInfo);
		start->visitFlag=1;
		list l=start->edges;
		l=l->next;
		while(l)
		{
			graphEdge e=(graphEdge)(l->element);
			graphVertex v=e->to;
			if(!v->visitFlag)
			{
				e->eTpye=TRE;
			}
			graphDfsSub(g,e->to);
			l=l->next;
		}
	}
}

void graphDfs(graph g, graphVertex start)
{
	graphDfsSub(g,start);

	list l=g->vertices;
	l=l->next;

	while(l)
	{
		graphVertex v=(graphVertex)(l->element);
		if(!v->visitFlag)
		{
			graphDfsSub(g,v);
		}
		l=l->next;
	}


}


void graphBfsSub(graph g,graphVertex start)
{
	queue q=newQueue();
	enQueue(q,start);
	
	while(!queueIsEmpty(q))
	{
		poly pTemp=deQueue(q);
		graphVertex vTemp=(graphVertex)(pTemp);

		if(vTemp->visitFlag==0)
		{
			visitGraph(vTemp->vInfo);
			vTemp->visitFlag=1;

		}
		list l=vTemp->edges;
		l=l->next;

		while(l)
		{
			graphEdge e=(graphEdge)(l->element);
			graphVertex v=e->to;
			if(v->visitFlag==0)
			{
				e->eTpye=TRE;
				enQueue(q,v);
			}

			l=l->next;
		}
	}
}

void graphBfs (graph g, graphVertex start)
{
	graphBfsSub(g,start);

	list l=g->vertices;
	l=l->next;

	while(l)
	{
		graphVertex v=(graphVertex)(l->element);
		if(v->visitFlag==0)
		{
			graphBfsSub(g,v);
		}
		l=l->next;
	}

}

/*void outputDfsEdge(graph g,graphVertex start)
{
	graphClear(g);
	printf("\nDFS:\n");
	graphDfs(g,start);

	list l=g->vertices;
	l=l->next;
	printf("\ntree edge:\n");
	while(l)
	{
		graphVertex v=(graphVertex)(l->element);
		list lEdge=v->edges;
		lEdge=lEdge->next;
		while(lEdge)
		{
			graphEdge e=(graphEdge)(lEdge->element);
			if(e->eTpye==TRE)
			{
				visit(e->from->vInfo);
				visit(e->to->vInfo);
				printf("\n");
			}
			lEdge=lEdge->next;
		}

		l=l->next;
	}
}

*/

tree graphDfsTree (graph g, graphVertex start)
{
	mystring gName=g->graphName;
	mystring tName=contactString(gName,"_Dfs_Tree");
	tree t=newTree(tName);

	graphClear(g);
	graphDfs(g,start);

	list l=g->vertices;
	l=l->next;

	list lv1=l;
	while(lv1)                                                   //先建立結點
	{
		graphVertex gV=(graphVertex)(lv1->element);
		treeInsertVertex(t,gV->vInfo);
		lv1=lv1->next;
	}


	list lv2=l;                                                   //建立邊
	while(lv2)
	{
		graphVertex gV2=(graphVertex)(lv2->element);               //取出結點
		list lEdge=gV2->edges;
		lEdge=lEdge->next;
		while(lEdge)                                               
		{
			graphEdge gE=(graphEdge)(lEdge->element);
			if(gE->eTpye==TRE)
			{
				mystring p1=(mystring)(gE->from->vInfo);
				mystring p2=(mystring)(gE->to->vInfo);

				printf("\nTree edge:\n");
				visit(p1);
				visit(p2);
				
				treeInsertEdge(t,p1,p2);

			}

			lEdge=lEdge->next;
		}
		lv2=lv2->next;

	}

	return t;
}




tree graphBfsTree (graph g, graphVertex start)
{
	mystring gName=g->graphName;
	mystring tName=contactString(gName,"_BFS_Tree");
	tree t=newTree(tName);
	
	graphClear(g);
	graphBfs(g,start);

	list l=g->vertices;
	l=l->next;

	list lv1=l;
	while(lv1)                                                   //先建立結點
	{
		graphVertex gV=(graphVertex)(lv1->element);
		treeInsertVertex(t,gV->vInfo);
		lv1=lv1->next;
	}

	list lv2=l;                                                   //建立邊
	while(lv2)
	{
		graphVertex gV2=(graphVertex)(lv2->element);               //取出結點
		list lEdge=gV2->edges;
		lEdge=lEdge->next;
		while(lEdge)                                               
		{
			graphEdge gE=(graphEdge)(lEdge->element);
			if(gE->eTpye==TRE)
			{
				mystring p1=(mystring)(gE->from->vInfo);
				mystring p2=(mystring)(gE->to->vInfo);

				printf("\nTree edge:\n");
				visit(p1);
				visit(p2);
				
				treeInsertEdge(t,p1,p2);

			}

			lEdge=lEdge->next;
		}
		lv2=lv2->next;

	}




	
	
	return t;


}

void visitGraph(poly x)
{
	printf("%s ",x);
}

int graphInDegreeIs(graph g)                              //判斷該圖是否有入度為零的結點
{
	list l=g->vertices;
	l=l->next;

	while(l)
	{
		graphVertex v=(graphVertex)(l->element);
		if(v->x==0)
			return 1;
		l=l->next;
	}
	printf("ai");
	return 0;

}


void graphTopoSort(graph g)
{
	list l=g->vertices;
	l=l->next;

	list l1=l;
	while(l1)                                            //求出各個結點的入度
	{
		graphVertex vG=(graphVertex)(l1->element);
		list eList=vG->edges;
		eList=eList->next;
		while(eList)
		{
			graphEdge eG=(graphEdge)(eList->element);
			(eG->to->x)++;
			eList=eList->next;
		}

		l1=l1->next;
	}

	list l2=l;
	
	while(graphInDegreeIs(g)==1)
	{
		
		while(l2)
		{
		graphVertex vG2=(graphVertex)(l2->element);
//		printf("\n%s  %d",vG2->vInfo,vG2->x);                       //第一次執行時,打印出入度
		
		if(vG2->x==0)
		{
			visit(vG2->vInfo);
			list lVE=vG2->edges;
			lVE=lVE->next;
			while(lVE)
			{
				graphEdge eVG=(graphEdge)(lVE->element);
				(eVG->to->x)--;
				lVE=lVE->next;
			}

		}
		
		
		l2=l2->next;
		}
	}



}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久最新网址| 日韩精品电影在线| 亚洲r级在线视频| 精品亚洲国产成人av制服丝袜| 波多野结衣亚洲一区| 欧美美女一区二区三区| 国产精品成人一区二区艾草 | 色噜噜狠狠色综合中国| 欧美精品一区二区在线播放| 亚洲高清免费观看| 成人av网站在线观看免费| 欧美精品一区二区三区高清aⅴ | 亚洲女爱视频在线| 国产精品影音先锋| 欧美成人a视频| 午夜精品久久久久久久久久久| 99久久国产综合色|国产精品| 国产亚洲精久久久久久| 激情五月激情综合网| 7777精品伊人久久久大香线蕉经典版下载| 欧美国产日韩一二三区| 国产999精品久久久久久| 日韩欧美激情在线| 美女精品一区二区| 欧美一级黄色片| 日韩高清电影一区| 欧美精品在线视频| 午夜亚洲国产au精品一区二区| 在线精品观看国产| 亚洲一区二区三区中文字幕| 色综合久久88色综合天天免费| 综合网在线视频| 不卡的av网站| 亚洲视频在线一区| 色综合一区二区| 夜夜夜精品看看| 在线不卡一区二区| 免费在线观看一区| 欧美岛国在线观看| 国产一区二区在线电影| 久久影音资源网| 成人午夜视频在线| 成人免费在线播放视频| 欧美亚洲综合网| 日本伊人精品一区二区三区观看方式| 91精品久久久久久久久99蜜臂| 日韩av一区二| 国产午夜精品久久久久久免费视| 国产成人av资源| 中文字幕永久在线不卡| 在线观看av不卡| 日本不卡视频一二三区| 久久久久久免费网| 91视频免费观看| 日韩国产一二三区| 久久久久久麻豆| 97精品视频在线观看自产线路二| 亚洲一级二级三级在线免费观看| 日韩亚洲欧美高清| 国产成人午夜高潮毛片| 一区二区国产视频| 精品国产乱码久久久久久蜜臀| 国产jizzjizz一区二区| 亚洲综合丁香婷婷六月香| 日韩女优av电影在线观看| 成人免费毛片a| 日本不卡在线视频| 国产精品视频一二三| 欧美电影一区二区| gogo大胆日本视频一区| 午夜精品视频一区| 国产精品女主播在线观看| 欧美性生活大片视频| 国产一区二区h| 亚洲国产精品嫩草影院| 久久精品欧美日韩精品| 欧美日韩黄视频| 国产999精品久久| 奇米四色…亚洲| 亚洲免费观看视频| 国产午夜精品理论片a级大结局| 欧美日韩一级片在线观看| 高潮精品一区videoshd| 欧美a级理论片| 一区二区三区不卡视频在线观看| 久久久亚洲高清| 欧美一区二区私人影院日本| 色吧成人激情小说| 懂色av一区二区三区免费看| 久久99这里只有精品| 亚洲成人精品一区| 亚洲天堂福利av| 国产精品美女久久久久高潮| 精品国产一区二区三区久久久蜜月| 欧洲av一区二区嗯嗯嗯啊| 国产成人精品影视| 国产另类ts人妖一区二区| 奇米色一区二区| 亚洲国产欧美在线人成| 亚洲女同女同女同女同女同69| 久久久国产午夜精品| 欧美一级高清大全免费观看| 欧美肥妇毛茸茸| 欧美精品1区2区3区| 精品视频全国免费看| 91精彩视频在线观看| 91在线视频在线| 99久久er热在这里只有精品15| 国产美女主播视频一区| 国产精品一色哟哟哟| 国产在线精品国自产拍免费| 极品少妇一区二区| 久久精品二区亚洲w码| 人人爽香蕉精品| 美女视频第一区二区三区免费观看网站| 亚洲va欧美va天堂v国产综合| 亚洲一级二级在线| 亚洲第一av色| 午夜欧美一区二区三区在线播放| 午夜精品福利视频网站| 日本在线播放一区二区三区| 久久精品国产亚洲5555| 久久精品国产第一区二区三区| 久久精品国产**网站演员| 国内精品不卡在线| 国产成人自拍在线| 成人va在线观看| 欧美中文字幕亚洲一区二区va在线 | 首页国产欧美日韩丝袜| 日韩av电影免费观看高清完整版在线观看 | 伊人婷婷欧美激情| 亚洲电影视频在线| 日韩精品91亚洲二区在线观看| 久久草av在线| av中文字幕不卡| 欧美日韩mp4| 精品成人免费观看| 中文字幕av免费专区久久| 亚洲欧美福利一区二区| 日韩电影一区二区三区四区| 国产美女一区二区| 91九色02白丝porn| 日韩欧美国产午夜精品| 欧美国产成人在线| 亚洲一区二区三区四区在线观看| 丝袜亚洲精品中文字幕一区| 国产激情精品久久久第一区二区| 99久久久久久| 91精品欧美福利在线观看| 国产日本亚洲高清| 亚洲一区在线观看视频| 精品综合久久久久久8888| av电影一区二区| 91超碰这里只有精品国产| 欧美国产日韩精品免费观看| 视频一区二区不卡| 99综合电影在线视频| 日韩午夜激情免费电影| 亚洲视频免费看| 久久精品999| 91精品福利在线| 国产精品天干天干在观线| 午夜精品久久久久| 成人午夜激情视频| 欧美一二三四区在线| 亚洲品质自拍视频网站| 国产一区二区影院| 在线综合+亚洲+欧美中文字幕| 亚洲天堂网中文字| 国产一区二区三区在线观看免费视频| 欧美午夜精品久久久久久孕妇| 久久久久久久电影| 奇米影视一区二区三区小说| 日本电影亚洲天堂一区| 久久精品视频在线免费观看| 首页国产欧美久久| 色哟哟欧美精品| 国产精品乱人伦中文| 国产制服丝袜一区| 欧美一区二区三区在线观看| 亚洲综合色网站| 色综合网色综合| 国产精品久久久久一区二区三区共| 久久精品国产亚洲高清剧情介绍| 欧美日韩精品免费| 一区二区三区欧美亚洲| yourporn久久国产精品| 久久久久成人黄色影片| 麻豆精品在线视频| 91精品国产一区二区三区| 午夜精品一区二区三区三上悠亚| 欧美在线免费播放| 亚洲最大色网站| 欧美在线观看一区二区| 夜夜揉揉日日人人青青一国产精品| 色综合久久精品| 亚洲精品中文在线| 91传媒视频在线播放| 一区二区三区资源| 精品视频一区二区不卡|