----天道酬勤
算法描述:
源自百度百科
实现:
typedef enum{
dg,dn,udg,udn
}graphkind;
typedef struct
{
char data;
int sign; //访问标志
}vertextype;
typedef struct
{
vertextype vexs[max];
int arcs[max][max];
int vexnum,arcnum;
graphkind kind;
}graph;
void prim(graph *s)
{
int data[max]; //存储访问的顶点
int k=0;
int i,j;
int a,b; //存储最短路径的始末点
int temp;
int min,flag;
for(i=0;i<s->vexnum;i++) //把顶点标记为未访问
{
s->vexs[i].sign=0;
}
data[k]=0;
s->vexs[0].sign=1;
while(k<s->vexnum-1)
{
min=0;
flag=0;
for(i=0;i<=k;i++)
{
temp=data[i];
for(j=0;j<s->vexnum;j++)
{
if(!s->vexs[j].sign&&s->arcs[temp][j]!=0)
{
if(0==flag) //初始化min
{
min=s->arcs[temp][j];
a=temp;
b=j;
flag=1;
}
if(min>s->arcs[temp][j])
{
min=s->arcs[temp][j];
a=temp;
b=j;
}
}
}
}
data[++k]=b; //加入已访问
s->vexs[b].sign=1;
cout<<s->vexs[a].data<<'-'<<s->vexs[b].data<<':'<<min<<endl;
}
}