现在的位置: 首页 > 综合 > 正文

构建图的邻接表

2013年10月13日 ⁄ 综合 ⁄ 共 1391字 ⁄ 字号 评论关闭

图的模型

示例代码

#include <iostream>
using namespace std;

const int topnode = 10;
struct arcnode
{
	int value;
	arcnode* next;
};

struct node
{
	int degree;
	arcnode* first;
};

node  list[topnode+1];
static int nodeNum = 0;
static int graphType;

void setgrapth()
{	
	cout << "please input node number: ";
	cin >> nodeNum;
	for(int  i = 1; i <= nodeNum; i++)
	{
		list[i].degree = 0;
		list[i].first = NULL;
	}	
	
	cout << "please input the graph type: 1 direct grapth 2 no direct grapth \n";
	cin >> graphType;
 
    int begin = 0;
	int end = 0;
	cout << "please input the side: format like these \"beginNum endNum \"\n";	

	while(cin >> begin >> end)
	{
		arcnode* tmp = list[begin].first;
		
		while( tmp != NULL && tmp->value != end )
	    {
		    tmp = tmp->next;
	    }	
		
		if(tmp == NULL)
		{
			tmp = new arcnode;
			tmp->value = end;
			if( NULL == list[begin].first)
			{
				list[begin].first = new arcnode;
				list[begin].first->value = begin;
				list[begin].first->next = tmp;
				tmp->next = NULL;
			}
			else
			{
				tmp->next = list[begin].first->next;
				list[begin].first->next = tmp;
			}
			list[begin].degree++;	

			if(graphType == 2)
			{
				arcnode* tmp2  = new arcnode;
				tmp2->value = begin;
				if( NULL == list[end].first )
				{
					list[end].first = new arcnode;
					list[end].first->value = end;
					list[end].first->next = tmp2;
					tmp2->next = NULL;
				}
				else
				{
					tmp2->next = list[end].first->next;
					list[end].first->next = tmp2;
				}
				list[end].degree++;	
			}
		}

	}

}

void printGraph()
{
	for(int i=1; i <= nodeNum; i++)
	{
		arcnode* printNode = list[i].first;
		while(printNode != NULL)
		{
			cout << printNode->value << "  -> ";
			printNode = printNode->next;
		}
		cout << "NULL" << endl;
	}
}


int main()
{
	setgrapth();
	printGraph();
	cout << "hello world" << endl;
	return 0;
}

代码所做功能

1、构建邻接表

2、打印邻接表

操作示例图:

抱歉!评论已关闭.