基于visual Studio2013解决算法导论之054图的邻接矩阵表示




题目

图的邻接矩阵表示


解决代码及点评

// 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点。
//

#include <iostream>  
#include <list>  
using namespace std; 
#define MAXVEX 10  
#define INFINITY 65535  
typedef struct 
{ 
	char vexs[MAXVEX]; 
	int arc[MAXVEX][MAXVEX]; 
	int numVertexes; 
	int numEdges; 
}MGraph;//图的数据结构,邻接矩阵  
void CreateMGraph(MGraph *pGraph,int &numVexs,int &numEdges) 
{ 
	pGraph->numEdges=numEdges; 
	pGraph->numVertexes=numVexs; 
	for(int i=0;i<numVexs;i++) 
	{ 
		cout<<"输入第"<<i+1<<"个顶点:"; 
		cin>>pGraph->vexs[i]; 
	} 
	for(int i=0;i<numVexs;i++) 
	{ 
		for(int j=0;j<numVexs;j++) 
			pGraph->arc[i][j]=INFINITY; 
	} 
	for(int i=0;i<numEdges;i++) 
	{ 
		int j,k; 
		cout<<"请输入第"<<i+1<<"条边的下标:"; 
		cin>>j>>k; 
		pGraph->arc[j][k]=1; 
		pGraph->arc[k][j]=1; 
	} 
} 
void BFSTravers(MGraph &pGraph) 
{ 
	int num=pGraph.numVertexes; 
	list<int> queue; 
	bool *visited=new bool[num]; 
	for(int i=0;i<num;i++) 
		visited[i]=false; 
	for(int i=0;i<pGraph.numVertexes;i++) 
	{ 
		if(!visited[i]) 
		{ 
			cout<<"访问顶点"<<pGraph.vexs[i]<<endl; 
			visited[i]=true; 
			queue.push_back(i); 
			while(!queue.empty()) 
			{ 
				i=queue.front(); 
				queue.pop_front(); 
				for(int j=0;j<pGraph.numVertexes;j++) 
				{ 
					if(pGraph.arc[i][j]==1&&!visited[j]) 
					{ 
						cout<<"访问顶点"<<pGraph.vexs[j]<<endl; 
						visited[j]=true; 
						queue.push_back(j); 
					} 
				} 
			} 
		} 
	} 
	delete []visited; 
} 
int main(int argc, char* argv[]) 
{ 
	MGraph graph; 
	int numVex; 
	int numEdge; 
	cout<<"输入图的顶点数:"; 
	cin>>numVex; 
	cout<<"输入图的边数:"; 
	cin>>numEdge; 
	CreateMGraph(&graph,numVex,numEdge); 
	BFSTravers(graph); 
	system("pause"); 
	return 0; 
} 



代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6858815

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









posted on 2014-01-17 21:59  三少爷的剑123  阅读(196)  评论(0编辑  收藏  举报

导航