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

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

?? graph.cc

?? 用OMNET++仿真蟻群的源碼,是無線傳感器網絡仿真的一個重要工具
?? CC
?? 第 1 頁 / 共 2 頁
字號:
// -*- C++ -*-
// Copyright (C) 2003 Leherstuh f黵 Betrieb System/ Verteilte System,
// Universitaet Dortmund
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

// Author: Muddassar Farooq
// Informatik III, Universitaet Dortmund
// Germany

//-------------------------------------------------------------
// file: graph.cpp
//       (part of AntNet Routing Simulation)
//-------------------------------------------------------------

#include "graph.h"
#include <stdio.h>
#include <assert.h>


routerNode::routerNode(int address)
{
	nodeID = address;
}

routerNode::routerNode()
{
	nodeID = 0;
}

routerNode& routerNode::operator =(const routerNode& rhs)
{
	if(this == &rhs)
	{
		return *this;
	}
	else
	{
		nodeID = rhs.nodeID;
	}
	return *this;
}


bool routerNode::operator==(const routerNode rhs)
{
	if( nodeID == rhs.nodeID)
	{
		return true;
	}
	return false;
}


graphNode::graphNode()
{
	nextGraphNode = NULL;
	outLinkNodeList = NULL;
	inLinkNodeList = NULL;
}

graphNode::graphNode(routerNode rNode)
{
	node = rNode;
	nextGraphNode = NULL;
	outLinkNodeList = NULL;
	inLinkNodeList = NULL;
}

bool graphNode::operator==(const graphNode& rhs)
{
	if( node == rhs.node)
	{
		return true;
	}
	return false;
}


bool graphNode::operator!=(const graphNode& rhs)
{
	if( node == rhs.node)
	{
		return false;
	}
	return true;
}


linkNode::linkNode()
{
	sourceNode = NULL;
	destNode = NULL;
	sameSourceNode = NULL;
	sameDestNode = NULL;

}

linkNode::linkNode(float linkCost, graphNode *sourceNode, graphNode *destNode)
{
	this->linkCost = linkCost;
	this->sourceNode = sourceNode;
	this->destNode = destNode;
	this->sameSourceNode = NULL;
	this->sameDestNode = NULL;

}

linkNode::linkNode(graphNode *sourceNode, graphNode *destNode)
{
	this->sourceNode = sourceNode;
	this->destNode = destNode;
	this->sameSourceNode = NULL;
	this->sameDestNode = NULL;
}

linkNode::linkNode(linkNode &rhs)
{
	sourceNode = rhs.sourceNode;
	destNode = rhs.destNode;
	sameSourceNode = rhs.sameSourceNode;
	sameDestNode = rhs.sameDestNode;
	linkCost = rhs.linkCost;

}


bool linkNode::operator==(const linkNode& rhs)
{
	if(this->sourceNode->node == rhs.sourceNode->node
		&& (this->destNode->node == rhs.destNode->node))
	{
		return true;
	}
	return false;


}

bool linkNode::operator!=(const linkNode& rhs)
{
	if(this->sourceNode->node == rhs.sourceNode->node
		&& (this->destNode->node == rhs.destNode->node))
	{
		return false;
	}
	return true;


}


graphNetwork::graphNetwork(const char *name):cObject()
{
	listOfGraphNodes = NULL;
	numNodes = 0;
	maxAddress = -1;

}

graphNetwork::graphNetwork(const graphNetwork& rhs):cObject()
{
	graphNode *start = rhs.listOfGraphNodes;
	graphNode *tempNode = start;
	listOfGraphNodes = NULL;


	while( tempNode != NULL)
	{
		addRouterNode(&tempNode->node);
		tempNode = tempNode->nextGraphNode;
	};

	tempNode = start;
	while( tempNode != NULL)
	{
		linkNode *out = tempNode->outLinkNodeList;

		while( out != NULL)
		{
			addLink(&out->sourceNode->node, &out->destNode->node, out->linkCost);
			out = out->sameSourceNode;
		};
		tempNode = tempNode->nextGraphNode;
	};
}


graphNetwork& graphNetwork::operator= (const graphNetwork& rhs)
{
	if( this == &rhs)
	{
		return *this;
	}

	else
	{
		this->~graphNetwork();
		cObject::operator=(rhs);
		graphNode *start = rhs.listOfGraphNodes;
		graphNode *tempNode = start;
		listOfGraphNodes = NULL;


		while( tempNode != NULL)
		{
			addRouterNode(&tempNode->node);
			tempNode = tempNode->nextGraphNode;
		};

		tempNode = start;
		while( tempNode != NULL)
		{
			linkNode *out = tempNode->outLinkNodeList;

			while( out != NULL)
			{
				addLink(&out->sourceNode->node, &out->destNode->node, out->linkCost);
				out = out->sameSourceNode;
			};
			tempNode = tempNode->nextGraphNode;
		};
		return *this;
	}
}

cObject* graphNetwork::dup() const
{
	return new graphNetwork(*this);

}

void graphNetwork::info(char *buf)
{
	cObject::info(buf);
	sprintf( buf+strlen(buf), "Nodes=%d", numNodes);

}

void graphNetwork::writeContents(ostream& os)
{

	graphNode *start = listOfGraphNodes;
	while( start != NULL)
	{
		os << "\n Graph Node := " << start->node.nodeID;
		os << "\t Neighbors := ";

		linkNode *out = start->outLinkNodeList;

		while( out != NULL)
		{
			os << "  " << out->destNode->node.nodeID << "( " << out->linkCost
				<< " )";
			out = out->sameSourceNode;

		}

		start = start->nextGraphNode;
	};
}


int graphNetwork::getNumNodes()
{
	return numNodes;
}

int graphNetwork::getMaxAddress()
{
	return maxAddress;
}


bool graphNetwork::graphNodeExists(graphNode *node, graphNode **nodePtr)
{
	graphNode *temp;
	temp = listOfGraphNodes;
	while ( temp != NULL)
	{
		if(temp->node == node->node)
		{
			*nodePtr = temp;
			return true;
		}
		else
		{
			temp = temp->nextGraphNode;
		}
	};
	nodePtr = NULL;
	return false;
}

bool graphNetwork::linkNodeExists(linkNode *node, linkNode *list,
								  linkNode **nodePtr, bool outlist = true)
{
	linkNode *temp;
	temp = list;
	while ( temp != NULL)
	{
		if( *temp == *node)
		{
			*nodePtr = temp;
			return true;
		}
		else
		{
			if( outlist)
			{
				temp = temp->sameSourceNode;
			}
			else
			{
				temp = temp->sameDestNode;
			}


		}
	};
	nodePtr = NULL;
	return false;
}



void graphNetwork::addGraphNode(graphNode *node)
{
	graphNode *temp;

	if(graphNodeExists(node, &temp))
	{
		throw new cException("Error: Could not Add: Node Exists");
	}

	graphNode *tempNode = new graphNode(*node);

	if( node->node.nodeID > maxAddress)
	{
		maxAddress = node->node.nodeID;
	}

	// if list of nodes is empty, then this is the first entry

	if( listOfGraphNodes == NULL)
	{
		listOfGraphNodes = tempNode;
		tempNode->nextGraphNode = NULL; //this is the first element
	}

	else
	{
		temp = listOfGraphNodes;

		// traverse the list until its end and then add the node

		while( temp->nextGraphNode != NULL)
		{
			temp = temp->nextGraphNode;
		};

		// add the node

		temp->nextGraphNode = tempNode;
		tempNode->nextGraphNode = NULL;

	}
	numNodes++;
}

void graphNetwork::deleteGraphNode(graphNode *node)
{
	graphNode *prevGraphNode;
	graphNode *tempGraphNode = NULL;
	linkNode *outLinkNodes;
	linkNode *inLinkNodes;
	linkNode *tempLinkNode;

	if(graphNodeExists(node, &tempGraphNode))
	{
		//this is the only node in the graph

		if (listOfGraphNodes == tempGraphNode) // we need to delete at front
		{
			outLinkNodes = tempGraphNode->outLinkNodeList;

			while( outLinkNodes != NULL) //delete all link originating at this node
			{
				tempLinkNode = outLinkNodes;
				outLinkNodes = outLinkNodes->sameSourceNode;
				deleteLinkNode(tempLinkNode);
			};

			inLinkNodes = tempGraphNode->inLinkNodeList;

			while( inLinkNodes != NULL) //delete all link terminating at this node
			{
				tempLinkNode = inLinkNodes;
				inLinkNodes = inLinkNodes->sameDestNode;
				deleteLinkNode(tempLinkNode);
			};

			listOfGraphNodes = tempGraphNode->nextGraphNode;
			delete tempGraphNode;
			numNodes--;


		} // we have more than one node

		else
		{
			tempGraphNode = listOfGraphNodes;

			while( *tempGraphNode != *node)
			{
				prevGraphNode = tempGraphNode;
				tempGraphNode = tempGraphNode->nextGraphNode;
			};


			outLinkNodes = tempGraphNode->outLinkNodeList;

			while( outLinkNodes != NULL) //delete all link originating at this node
			{
				tempLinkNode = outLinkNodes;
				outLinkNodes = outLinkNodes->sameSourceNode;
				deleteLinkNode(tempLinkNode);
			};

			inLinkNodes = tempGraphNode->inLinkNodeList;

			while( inLinkNodes != NULL) //delete all link terminating at this node
			{
				tempLinkNode = inLinkNodes;
				inLinkNodes = inLinkNodes->sameDestNode;
				deleteLinkNode(tempLinkNode);
			};

			// update all the links situation and then update the list

			prevGraphNode->nextGraphNode = tempGraphNode->nextGraphNode;

			delete tempGraphNode;
			numNodes--;
		}
	}

	else
	{
		throw new cException("Error: Graph Node does not exist that needs to be deleted");
	}
}

void graphNetwork::updateLinkNode(graphNode *source, graphNode *dest, linkNode *link)
{
	graphNode *tempSource = NULL;
	graphNode *tempDest = NULL;
	linkNode *tempLinkNode = NULL;

	if( graphNodeExists(link->sourceNode, &tempSource) &&
		graphNodeExists(link->destNode, &tempDest))
	{

		if( linkNodeExists(link, tempSource->outLinkNodeList,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区在线不卡| 91国偷自产一区二区开放时间| 欧美视频在线观看一区二区| 亚洲精品免费一二三区| 色悠悠亚洲一区二区| 亚洲视频一二区| 91成人网在线| 日韩不卡一区二区三区| 日韩欧美黄色影院| 国产在线精品国自产拍免费| 日本一区二区三区四区| 91蜜桃在线观看| 亚洲国产欧美在线| 5858s免费视频成人| 激情文学综合插| 欧美激情一区不卡| 色国产精品一区在线观看| 亚洲444eee在线观看| 91精品黄色片免费大全| 国产麻豆91精品| 亚洲免费av高清| 欧美一区二区三区不卡| 粉嫩高潮美女一区二区三区| 亚洲人成精品久久久久久 | 日韩综合小视频| 欧美tickling网站挠脚心| 粉嫩欧美一区二区三区高清影视| 亚洲色图一区二区三区| 91麻豆精品国产91| 成人午夜伦理影院| 午夜电影网一区| 国产人妖乱国产精品人妖| 欧美性猛片aaaaaaa做受| 日韩福利视频导航| 国产精品免费av| 91精品欧美久久久久久动漫| 国产成人精品三级| 日韩精品一二三| 国产精品超碰97尤物18| 欧美一区二区大片| av亚洲精华国产精华| 欧美a级一区二区| 亚洲激情第一区| 久久精品夜色噜噜亚洲aⅴ| 91蜜桃视频在线| 国产一本一道久久香蕉| 午夜精品久久久| 136国产福利精品导航| 欧美一区二区久久久| 色狠狠一区二区| 国产91精品免费| 久久福利资源站| 亚洲国产色一区| 一区在线观看视频| 久久久久成人黄色影片| 91精品国产高清一区二区三区蜜臀| av在线不卡电影| 国产在线精品免费| 另类小说欧美激情| 婷婷亚洲久悠悠色悠在线播放| 亚洲欧洲国产专区| 26uuu国产电影一区二区| 欧美精品色综合| 色94色欧美sute亚洲线路二| 国产福利不卡视频| 狠狠色狠狠色合久久伊人| 日韩中文字幕1| 亚洲18影院在线观看| 一区二区在线观看视频| 日韩一区欧美小说| 中文一区二区完整视频在线观看| 久久综合狠狠综合久久激情| 日韩视频一区二区三区在线播放| 欧美在线观看视频在线| 91官网在线免费观看| 91小视频免费观看| 99久久久久免费精品国产| 成人免费黄色大片| 成人免费av资源| k8久久久一区二区三区| 成人免费看黄yyy456| 国产福利不卡视频| 国产成人精品影院| 粉嫩嫩av羞羞动漫久久久| 国产成人亚洲综合a∨婷婷| 国产激情视频一区二区三区欧美| 国产九色sp调教91| 国产精品白丝jk黑袜喷水| 国产美女精品在线| 成人丝袜视频网| 成a人片亚洲日本久久| 91天堂素人约啪| 在线欧美日韩国产| 8x福利精品第一导航| 日韩欧美国产综合| 久久久国产精华| 国产精品水嫩水嫩| 亚洲小说欧美激情另类| 丝袜美腿成人在线| 韩国欧美国产一区| 成人动漫中文字幕| 欧美在线你懂的| 欧美成人三级在线| 国产欧美精品国产国产专区| 亚洲丝袜制服诱惑| 婷婷成人综合网| 国产伦精品一区二区三区免费迷| 成人丝袜视频网| 欧美性大战久久久久久久| 欧美一卡二卡三卡| 欧美高清在线一区二区| 亚洲一区二区三区美女| 久久精品国产**网站演员| 成人午夜视频福利| 91精品黄色片免费大全| 欧美国产1区2区| 天天影视色香欲综合网老头| 国产麻豆视频一区| 欧美无砖砖区免费| 久久综合久色欧美综合狠狠| 亚洲人成在线播放网站岛国| 蜜桃视频一区二区三区| 99视频国产精品| 欧美一区二区三区在线看| 国产精品视频你懂的| 日韩不卡一二三区| 99久久久精品| 精品嫩草影院久久| 夜夜揉揉日日人人青青一国产精品 | 成人激情校园春色| 欧美高清精品3d| 中文字幕精品三区| 日av在线不卡| 色综合天天视频在线观看| 欧美成va人片在线观看| 亚洲欧美福利一区二区| 韩国成人福利片在线播放| 欧美伊人精品成人久久综合97 | 欧美最猛黑人xxxxx猛交| 精品国产乱码久久久久久免费| 亚洲人成伊人成综合网小说| 国产一区二区三区四| 91麻豆精品国产91久久久 | 国产综合久久久久久鬼色| 在线观看国产一区二区| 国产精品免费人成网站| 久久国产精品99久久人人澡| 欧美视频在线一区二区三区 | 久久99热狠狠色一区二区| 91官网在线观看| 国产精品黄色在线观看| 国产精品911| 亚洲精品一区二区三区在线观看| 亚洲电影视频在线| 91网站视频在线观看| 国产色91在线| 国产资源在线一区| 日韩一区二区在线看| 日日噜噜夜夜狠狠视频欧美人| 在线视频一区二区免费| 亚洲激情在线激情| 一本色道久久综合狠狠躁的推荐| 日本一区二区视频在线| 国产91在线|亚洲| 国产日产精品一区| 国产不卡一区视频| 国产免费久久精品| 国产成人超碰人人澡人人澡| 久久伊人中文字幕| 寂寞少妇一区二区三区| 精品国产污网站| 麻豆专区一区二区三区四区五区| 欧美日韩一二区| 天堂久久一区二区三区| 91麻豆精品国产91久久久久久久久| 视频一区欧美精品| 日韩西西人体444www| 久久91精品国产91久久小草 | 日本福利一区二区| 亚洲免费色视频| 在线中文字幕一区二区| 亚洲成人三级小说| 91麻豆精品国产91久久久久久 | 欧美高清在线精品一区| 波多野结衣在线一区| 亚洲摸摸操操av| 欧美日韩mp4| 久久草av在线| 国产欧美一区二区精品性| 国产精品一区二区免费不卡| 国产精品嫩草影院com| 91黄色免费版| 免费人成网站在线观看欧美高清| 日韩午夜中文字幕| 色域天天综合网| 天堂av在线一区| 久久综合九色综合欧美亚洲| 高清不卡一二三区| 一区二区三区日韩| 欧美一级电影网站|