/**创建无向网的邻接矩阵**/
#include <cstdlib>//exit
#include <iomanip>//swet
#include<iostream>//cout,cin
using namespace std;
#define MAX 20
#define MAXINT 39788//表示无穷大
int visited[MAX]={0};//全局变量
typedef char DataType;
//结构体类型
typedef struct
{
int vexnum;//顶点数目
int arcnum;//边的数目
DataType ver[MAX];//点表
int arc[MAX][MAX];//边表
}AMGraph;//邻接矩阵
int locate(DataType e,AMGraph G)
{
int i,k=-1;
for(i=0;i<G.vexnum;i++)
if(e==G.ver[i])
k=i;
return k;
}
void CreateUDN(AMGraph &G)//创建无向网
{
int i,j,a,b1,b2;
DataType V1,V2;
cout<<"分别输入总顶点数和总边数: ";
cin>>G.vexnum>>G.arcnum;
cout<<"输入顶点的数据元素"<<endl;
for(i=0;i<G.vexnum;i++)
cin>>G.ver[i];
for(i=0;i<G.arcnum;i++)
for(j=0;j<G.arcnum;j++)
G.arc[i][j]=MAXINT;//边表的初始化
cout<<"分别输入一条边所依附的两个顶点和权值:";
cout<<endl;
for(i=0;i<G.arcnum;i++)//给边表赋值啦
{
cin>>V1>>V2>>a;//scanf("%c%c%d",&V1,&V2,&a);
b1=locate(V1,G);//找到顶点在点的数组中的位置
b2=locate(V2,G);
G.arc[b1][b2]=a;
G.arc[b2][b1]=a;
}
}
void Print(AMGraph G)
{
int i,j;
cout<<" ";
for(i=0;i<G.vexnum;i++)
{
cout<<setw(8)<<G.ver[i];
}
cout<<endl;
for(i=0;i<G.vexnum;i++)
{
cout<<i<<" "<<G.ver[i]<<" ";
for(j=0;j<G.vexnum;j++)
{
cout<<setw(8)<<G.arc[i][j];//printf("%-4d",G.arc[i][j]);
}
cout<<endl;
}
}
void DFS(AMGraph G,int e)//e是起点
{
int i;
cout<<G.ver[e]<<" ";
visited[e]=1;
for(i=0;i<G.vexnum;i++)
if(!visited[i]&&G.arc[e][i]!=MAXINT)
DFS(G,i);
}
int main(void)
{
AMGraph G;
int a,b,i;
CreateUDN(G);
cout<<"邻接矩阵为"<<endl;
Print(G);
cout<<endl<<"1.深度遍历"<<endl<<"2.退出"<<endl;
while(1)
{
cout<<"请选择:";
cin>>b;
switch(b)
{
case 1:
cout<<"输入起点:";
cin>>a;
cout<<"深度优先为:";
DFS(G,a);
cout<<endl;
for(i=0;i<G.vexnum;i++)
visited[i]=0;
break;
case 2:
exit(0);
break;
}
}
}
/**
A B 500
A C 300
B C 400
C D 150
B D 200
**/
无向网-邻接矩阵-深度优先
最新推荐文章于 2023-06-26 12:21:09 发布