您的位置:首页 > 其它

临时

2016-05-26 09:25 323 查看
#include <iostream>
using namespace std;
typedef char VertexType;
typedef int EdgeType;
const int MAXVEX = 100;
const int INFINITY = 65535;
bool visits[MAXVEX];
VertexType quque[MAXVEX];
typedef struct
{
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numVertexes,numEdges;
} MGraph;

// 1
void CreateMGraph(MGraph &G)
{
int i,j,k,w;
cout<<"请输入顶点数和边数: ";
cin>>G.numVertexes>>G.numEdges;

cout<<"请输入各顶点信息: "<<endl;
for(i=0;i<G.numVertexes;i++)
{
cin>>G.vexs[i];
}

for(int i=0;i<G.numVertexes;i++)
{
for(int j=0;j<G.numVertexes;j++)
{
G.arc[i][j] = INFINITY;
}
}

for(int k=0;k<G.numEdges;k++)
{
cout<<"请输入边(vi,vj)的上下坐标i,j以及边的权值w: ";
cin>>i>>j>>w;

G.arc[i][j] = w;
G.arc[j][i] = G.arc[i][j];
}
}

void DFS(MGraph G,int i)
{
int j;
visits[i] = true;
cout<<G.vexs[i]<<" ";

for(j=0;j<G.numVertexes;j++)
{
if(G.arc[i][j]!=INFINITY && !visits[j])
{
DFS(G,j);
}
}
}
// 2
void DFSTraverse(MGraph G)
{
int i;
for(i=0;i<G.numVertexes;i++)
visits[i] = false;

for(i=0;i<G.numVertexes;i++)
{
if(!visits[i])
{
DFS(G,i);
}
}
}

// 3
void BFS(MGraph G)
{
int i;
int head = 0;
int tail = 0;

for(i=0;i<G.numVertexes;i++)
{
visits[i] = false;
quque[i] = ' ';
}

quque[tail] = G.vexs[0];
visits[tail] = true;
tail++;

while(head<tail)
{
for(i=0;i<G.numVertexes;i++)
{
if(G.arc[head][i]!=INFINITY && !visits[i])
{
quque[tail] = G.vexs[i];
tail++;
visits[i] = true;
}
if(tail>G.numVertexes)
{
break;
}
}
head++;
}

for(i=0;i<G.numVertexes;i++)
{
if(visits[i])
{
cout<<"yes"<<i<<" ";
}
}
}
int main()
{
MGraph G;
CreateMGraph(G);
DFSTraverse(G);
BFS(G);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: