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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tree.cpp

?? 算法中圖算法的詳細(xì)實(shí)現(xiàn)
?? CPP
字號:
#include "Tree.h"#include <limits.h>#include <iostream>#include <map>#include <queue>#include <set>using namespace std;Tree::Tree( int nnodes ){	nnode = nnodes;	list< treenode* > ll;	myTree.push_back(ll);	for( int i = 1 ; i <= nnodes; i ++ )	{		treenode *node = new treenode(i);		list< treenode* > l;		l.push_back( node );		myTree.push_back( l );			}	for( int i = 0; i <= nnode; i ++ )	{		vector< int > now;		matrix.push_back( now );		parent.push_back( now );		for( int j = 0; j <= nnode; j ++ )		{			matrix[i].push_back( 0 );			parent[i].push_back( 0 );		}	}}void Tree::addOneEdge(int from , int to , int value){	treenode *node = myTree[to].front();	edge.insert( make_pair( make_pair( from , to ) , value ));	addOneEdge( from , node );}void Tree::addOneEdge( int from , treenode* node ){	myTree[from].push_back( node );	}int Tree::getEdgeValue( int from , int to ){	if( from == to )		return 0;	pair< int , int > p = make_pair( from , to );	map< pair< int , int > , int >::iterator it = edge.find( p );	if( it != edge.end() )		return it->second;	else		return INT_MAX;}void Tree::removeOneEdge( int from , int to ){	list< treenode* > l = myTree[from];	list< treenode* >::iterator it = l.begin();	while( it != l.end() )	{		if( (*it)->id == to )		{			l.erase( it );			break;		}	}}void Tree::BFS( int s ){	for( int i = 1;i <= nnode ; i ++ )	{		if( i != s )		{			myTree[i].front()->color = WHITE;			myTree[i].front()->distence = INT_MAX;			myTree[i].front()->parent = NULL;		}	}	treenode* node = myTree[s].front();	node->color = GRAY;	node->distence = 0;	node->parent = NULL;	myQueue.push( node );	while( !myQueue.empty() )	{		treenode* u = myQueue.front();		myQueue.pop();		int id = u->id;		cout << u->id << "(depth:" << u->distence << ")   ";		list< treenode* > l = myTree[id];		list< treenode* >::iterator it = l.begin();		it ++;		while( it != l.end() )		{			if( (*it)->color == WHITE )			{				(*it)->color = GRAY;				(*it)->distence = u->distence + 1;				(*it)->parent = u;				myQueue.push( *it );			}			it ++;		}		u->color = BLACK;	}}void Tree::DFS(){	topologicalList.clear();	for( int i = 1; i <= nnode; i ++ )	{		treenode* node = myTree[i].front();		node->color = WHITE;		node->parent = NULL;	}	myTime = 0;	for( int i = 1; i <= nnode; i ++ )	{		treenode* node = myTree[i].front();		if( node->color == WHITE )		{			dfs_visit( i , myTree );		}	}}void Tree::dfs_visit( int root , vector< list< treenode* > >& G ){	treenode* node = G[root].front();	node->color = GRAY;	myTime ++;	node->firsttime = myTime;	list< treenode* > l = G[root];	list< treenode* >::iterator it = l.begin();	it ++;	while( it != l.end() )	{		if( (*it)->color == WHITE )		{			(*it)->parent = node;			dfs_visit( (*it)->id , G);		}		it ++;	}	node->color = BLACK;	myTime ++;	node->endtime = myTime;	topologicalList.push_front( node->id );}void Tree::print_path( int root , int end ){	BFS( root );	print( root , end );}void Tree::printTopologic(){	list< int >::iterator it = topologicalList.begin();	while( it != topologicalList.end() )	{		cout << *it << "   ";		it ++;	}}void Tree::print(int root ,  int end ){	if( end == root )		cout << "v" << root << "--->";	else	{		treenode* now = myTree[end].front();		if( now->parent == NULL )		{			cout << "There is no path from " << root << " to " << end << endl;			return;		}		else		{			print( root , now->parent->id );			cout << "v" << end  << "--->";		}	}}void Tree::getGT(){	list< treenode* > ll;	myGT.push_back( ll );	for( int i = 1; i <= nnode; i ++ )	{		list< treenode* > l;		treenode* node = new treenode( i );		l.push_back( node );		myGT.push_back( l );	}	for( int i = 1; i <= nnode; i ++ )	{		list< treenode* > l = myTree[i];		list< treenode* >::iterator it = l.begin();		it ++;		while( it != l.end() )		{			int pid = (*it)->id;			myGT[pid].push_back( myGT[i].front() );			it ++;		}	}}void Tree::strongly_connected(){	DFS();	map< int , int > index;	for( int i = 1; i <= nnode; i ++ )	{		treenode* node = myTree[i].front();		index.insert( make_pair( node->endtime , node->id ) );	}	getGT();	for( int i = 1; i <= nnode; i ++ )	{		myGT[i].front()->color = WHITE;		myGT[i].front()->parent = NULL;	}	map< int , int >::reverse_iterator rit = index.rbegin();	while( rit != index.rend() )	{		int pid = rit->second;		if( myGT[pid].front()->color == WHITE )		{			cout << "Strongly Connected Tree root: " << pid << endl;			dfs_visit( pid , myGT );			cout << endl;		}		rit ++;	}}void Tree::MST_PRIM(int root ){	caseno = 1;	int total = 0;	set< qnode > myQueue;	set< int > outQueue;	treenode* node = myTree[root].front();	node->key = 0;	qnode qq( root , node->key );	myQueue.insert( qq );	for( int i = 1; i <= nnode; i ++ )	{		if( i == root )			continue;		treenode* node = myTree[i].front();		node->key = INT_MAX;		node->parent = NULL;		qnode qn( i , node->key );		myQueue.insert( qn );	}	set< qnode >::iterator pq;	while( !myQueue.empty() )	{		pq = myQueue.begin();		qnode q = *pq;		myQueue.erase( pq );		total += q.key;		cout << "The " << caseno << " node: { " << q.id << " , " << q.key << " }" << endl;		int id = q.id;		outQueue.insert( id );		list< treenode* >l = myTree[id];		list< treenode* >::iterator it = l.begin();		it ++;		while( it != l.end() )		{			int myid = (*it)->id;							if( outQueue.find( myid ) == outQueue.end() )			{				(*it)->parent = node;				int w = getEdgeValue( id , myid ); 				treenode* now = myTree[myid].front();					if( now->key > w )				{					qnode tt( myid , now->key );					myQueue.erase( tt );					now->key = w;					tt.key = w;					myQueue.insert( tt );				}			}			it ++;		}	}	cout << "The total value of the MST produced by PRIM is: " << total << endl;}void Tree::initialize_single_source( ){	for( int i = 1; i <= nnode; i ++ )	{		treenode* node = myTree[i].front();		node->value = INT_MAX;		node->parent = NULL;	}}void Tree::relax( int u , int v , set< treenode* , value_cmp >& myQueue ){	treenode* node1 = myTree[u].front();	treenode* node2 = myTree[v].front();	int xv = node1->value + getEdgeValue( u , v );	if( node2->value > xv )	{		myQueue.erase( node2 );		node2->value = xv;		node2->parent = node1;		myQueue.insert( node2 );	}}void Tree::dijkstra( int s ){	initialize_single_source();	myTree[s].front()->value = 0;	set< int > S;	set< treenode* , value_cmp > myQueue;	myQueue.insert( myTree[s].front() );		while( !myQueue.empty() )	{		treenode* now = *myQueue.begin();		myQueue.erase( myQueue.begin() );		int nowid = now->id;		S.insert( nowid );		list< treenode* > l = myTree[nowid];		list< treenode* >::iterator it = l.begin();		it ++;		while( it != l.end() )		{			treenode* adjnode = *it;			int adjid = adjnode->id;			if( S.find( adjid ) == S.end() )				relax( nowid , adjid , myQueue );			it ++;		}	}}void Tree::print_all_single_source_path( int s ){	cout << "All the paths is: " << endl;	for( int i = 1; i <= nnode; i ++ )	{		if( i != s )		{			cout << "The path from " << s << " to " << i << " is: " << endl;			int total = print_single_source_path(i);			cout << "(TotalValue: " << total << " )" << endl;		}		cout << endl;	}}int Tree::print_single_source_path( int e ){	int result = 0;	treenode* end = myTree[e].front();	if( end->parent == NULL )	{		cout << end->id << "(" << end->value << ") " << "--->";	}	else	{		result = print_single_source_path(end->parent->id);		cout << end->id << "(" << end->value << ") " << "--->" ;	}	return end->value;}bool Tree::bellman_ford (int s){	set< treenode* , value_cmp> qq ;	initialize_single_source();	myTree[	s ].front()->value = 0;	for( int i = 1; i < nnode; i ++ )	{		map< pair< int , int > , int >::iterator it = edge.begin();		while( it != edge.end() )		{			pair< int , int > p = it->first;			relax( p.first , p.second  , qq);			it ++;		}	}	map< pair< int , int > , int >::iterator it = edge.begin();	while( it != edge.end() )	{		pair< int , int > p = it->first;		treenode* node1 = myTree[p.first].front();		treenode* node2 = myTree[p.second].front();		if( node2->value > node1->value + getEdgeValue( p.first , p.second ) )			return false;		it ++;	}	return true;}void Tree::slow_all_pairs_shortest_paths(){	//initialize	for( int i = 1; i <= nnode; i ++ )	{		for( int j = 1; j <= nnode; j ++ )		{			int ev = getEdgeValue( i , j );			matrix[i][j] =  ev;			if( ev != INT_MAX )				parent[i][j] = i;		}	}	for( int i = 2; i <= nnode - 1; i ++ )		extend_shortest_paths();}void Tree::extend_shortest_paths(){	for( int i = 1; i <= nnode; i ++ )	{		for( int j = 1; j <= nnode ; j ++ )		{			for( int k = 1; k <= nnode; k ++ )			{				//relax				int ev = getEdgeValue( k , j );				if( ev == INT_MAX || matrix[i][k] == INT_MAX )					continue;				int t = matrix[i][k] + ev;				if( matrix[i][j] >  t )				{					matrix[i][j] = t ;					parent[i][j] = k;				}			}		}	}}void Tree::print_all_pairs_shortest_paths(){	for( int i = 1; i <= nnode; i ++ )	{		for( int j = 1; j <= nnode; j ++ )		{			cout << i << " to " << j << ":" << endl;			print_one_pair_shortest_path( i , j );			cout << "ShortestPath( " << matrix[i][j] << " )" ;			cout << endl;		}		cout << endl;	}}bool Tree::print_one_pair_shortest_path( int from , int to ){	if( from == to )		cout << from << "--->";	else if( parent[from][to] == 0 )	{		cout << "No path from " << from << " to " << to << endl;		return false;	}	else	{		if( print_one_pair_shortest_path( from , parent[from][to] ) ) 			cout << to << "--->";		else			return false;	}	return true;}void Tree::Floyd_Warshall(){	for( int i = 1; i <= nnode; i ++ )	{		for( int j = 1; j <= nnode; j ++ )		{			int ev = getEdgeValue( i , j );			matrix[i][j] = ev;			if( ev != INT_MAX )				parent[i][j] = i;			else				parent[i][j] = 0;		}	}		for( int k = 1; k <= nnode; k ++ )	{		vector< vector< int > > old = matrix;		vector< vector< int > > oldParent = parent;		for( int i = 1; i <= nnode; i ++ )		{			for( int j = 1; j <= nnode; j ++ )			{				if( old[i][k] == INT_MAX || old[k][j] == INT_MAX )					continue;				int newvalue = old[i][k] + old[k][j];				if( matrix[i][j] > newvalue )				{					matrix[i][j] = newvalue;					parent[i][j] = oldParent[k][j];				}			}		}	}}Tree::~Tree(){	for( int i = 1; i <= nnode ; i ++ )	{		treenode* node = myTree[i].front();		delete node;		if( !myGT.empty() )		{			node = myGT[i].front();			delete node;		}	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区二区三区| 一区二区三区小说| av电影一区二区| 国产自产视频一区二区三区| 亚洲.国产.中文慕字在线| 亚洲桃色在线一区| 亚洲激情自拍偷拍| 亚洲精品乱码久久久久| 亚洲欧美日韩一区二区| 亚洲午夜影视影院在线观看| 一级日本不卡的影视| 亚洲一区二区视频在线| 一二三区精品视频| 亚洲成av人片www| 日韩国产精品久久久久久亚洲| 日本一区中文字幕| 黄页视频在线91| 国产一区二区三区日韩| 国产成人免费xxxxxxxx| a级高清视频欧美日韩| 成人精品一区二区三区四区| 色综合久久88色综合天天 | 欧美日韩色综合| 欧美精品一级二级| 久久久久高清精品| 自拍偷拍亚洲综合| 国产在线精品国自产拍免费| 国产美女视频一区| av在线一区二区三区| 在线观看中文字幕不卡| 日韩三级高清在线| 国产精品人人做人人爽人人添| 亚洲品质自拍视频网站| 久久国产精品99久久久久久老狼| 韩国精品主播一区二区在线观看| 国产高清无密码一区二区三区| 成人aa视频在线观看| 欧美性大战久久久久久久| 精品国产乱码久久久久久免费| 国产女同互慰高潮91漫画| 一区二区三区国产精品| 久久精品国产久精国产爱| 99久久99久久免费精品蜜臀| 日韩一区二区在线观看视频| 国产精品久久久久久久久久久免费看 | 美日韩一区二区| 91蜜桃免费观看视频| 日韩视频免费直播| 一区二区三区日韩欧美| 国产传媒日韩欧美成人| 欧美日韩午夜在线视频| 国产精品视频看| 青娱乐精品视频| 99国产精品久久久久久久久久 | 欧美日韩性生活| 日韩一区在线播放| 国模娜娜一区二区三区| 欧美麻豆精品久久久久久| 中文字幕日韩一区| 高清在线不卡av| 日韩免费成人网| 日韩精品乱码av一区二区| 色综合天天视频在线观看| 久久久综合九色合综国产精品| 日韩激情一区二区| 欧美精品一二三区| 亚洲成av人片观看| 欧美亚洲综合另类| 国产精品国产三级国产普通话99| 精品无人码麻豆乱码1区2区 | 亚洲九九爱视频| 福利一区二区在线| 久久久精品tv| 成人永久看片免费视频天堂| 久久久久国产精品麻豆| 国产一区二区三区免费播放| 日韩欧美中文一区二区| 蜜臀av在线播放一区二区三区| 欧美高清dvd| 青青草原综合久久大伊人精品| 欧美精品亚洲一区二区在线播放| 亚洲成av人片| 日韩视频免费观看高清完整版在线观看 | 精品福利在线导航| 免费在线观看视频一区| 日韩欧美精品三级| 国产精品一区二区久久不卡| 久久久99精品久久| 成人精品视频一区二区三区 | 国内精品视频一区二区三区八戒| 欧美大度的电影原声| 国产一区视频网站| 中文字幕免费观看一区| 色婷婷久久99综合精品jk白丝| 一片黄亚洲嫩模| 欧美在线free| 麻豆视频一区二区| 欧美高清在线一区二区| 欧美这里有精品| 精品制服美女久久| 国产精品国产自产拍在线| 在线观看网站黄不卡| 久久99热国产| 午夜天堂影视香蕉久久| 欧美一区二区三区在线观看| 国产高清视频一区| 亚洲最新在线观看| 精品国产第一区二区三区观看体验| 狠狠色丁香久久婷婷综| 亚洲欧美日韩国产综合| 日韩一级在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美精品一区二区三区高清aⅴ | 久久伊人中文字幕| 国产一区高清在线| 亚洲一区二区三区小说| 久久久久久久综合| 在线一区二区视频| 国产一区二区三区视频在线播放| 亚洲综合色视频| 国产三级久久久| 欧美丰满少妇xxxxx高潮对白| 国产精品一级二级三级| 性做久久久久久免费观看欧美| 久久精品日韩一区二区三区| 欧美日韩成人一区二区| 成人免费视频免费观看| 日本91福利区| 亚洲国产日韩a在线播放性色| 国产亚洲午夜高清国产拍精品| 884aa四虎影成人精品一区| 高清在线观看日韩| 另类成人小视频在线| 亚洲午夜精品一区二区三区他趣| 中文av一区二区| 久久影院午夜片一区| 欧美一区二区三区四区五区| 91丨porny丨首页| 波多野结衣中文字幕一区| 国产自产v一区二区三区c| 日韩1区2区3区| 亚洲成a天堂v人片| 亚洲综合视频网| 一个色在线综合| 一区二区三区不卡在线观看 | 亚洲bt欧美bt精品| 中文字幕一区二区三区四区不卡| 亚洲精品一区二区三区蜜桃下载 | 天天综合色天天| 亚洲一区二区三区四区中文字幕| 亚洲欧洲三级电影| 国产精品久久三| 国产精品久久久一本精品| 国产日韩综合av| 国产精品素人视频| 国产精品理论在线观看| 中文字幕第一页久久| 久久精品一级爱片| 欧美大白屁股肥臀xxxxxx| 欧美一区二区三区婷婷月色| 欧美另类高清zo欧美| 欧美日韩成人在线| 欧美一区二区大片| 日韩视频一区二区三区| 精品电影一区二区| 欧美激情在线一区二区| 中文字幕五月欧美| 亚洲曰韩产成在线| 日韩电影免费一区| 蜜臀av性久久久久蜜臀aⅴ| 九色综合狠狠综合久久| 国产一区二区久久| 成人伦理片在线| 欧美日韩在线综合| 日韩欧美的一区二区| 国产视频911| 中文字幕一区二区三区四区| 亚洲天堂成人网| 日日骚欧美日韩| 丁香婷婷综合激情五月色| av一本久道久久综合久久鬼色| 在线日韩av片| 日韩视频在线永久播放| 国产精品丝袜一区| 首页综合国产亚洲丝袜| 国产不卡视频在线播放| 一本久久综合亚洲鲁鲁五月天| 欧美久久免费观看| 国产女人18水真多18精品一级做| 国产精品福利一区二区| 一区二区欧美精品| 国产成人在线网站| 欧美日韩一区二区在线观看| 久久夜色精品国产噜噜av| 亚洲精品视频一区二区| 精品中文字幕一区二区| 欧美丝袜自拍制服另类| 日本一区二区三区四区在线视频| 亚洲一区在线视频观看| 在线视频观看一区|