さいしょうせいせいじゅ

2592 ワード

#include <stdio.h>
#include<queue>       ///  STL     
#include<stack>        ///  STL    
#include<string.h>
#define max 100
using namespace std;
int visited[max]={0};
typedef struct Arccell{
    int adj;
}Arccell,Adjm[max][max];
typedef struct{
    int vexs[max];
    Adjm arcs;
    int vex,arc;
}Mgraph;
struct{
    int adj;
    int low;
}edge[max];
int Locatevex(Mgraph &G,int v)
{
  int i,k=-1;
       for(i=0;i<G.vex;i++)
            if(v==G.vexs[i])
            {
               k=i;
               break;
            }
      return k;
}

void CreateGraph(Mgraph &G)
{
    int i,j,k;
    int s;
    int w;
    int v1,v2;
    printf ("          :
"); scanf("%d%d",&G.vex,&G.arc); printf(" :
"); for(i=0;i<G.vex;i++) { scanf("%d",&s); G.vexs[i]=s; } for(i=0;i<G.vex;i++) /// for(j=0;j<=G.vex;j++) G.arcs[i][j].adj=100; printf(" :
"); for(k=0;k<G.arc;k++) { scanf("%d%d%d",&v1,&v2,&w); i=Locatevex(G,v1); j=Locatevex(G,v2); if((i!=-1)&&(j!=-1)) G.arcs[i][j].adj=w; G.arcs[j][i].adj=G.arcs[i][j].adj; } printf(" :
"); for (i=0;i<G.vex;i++) { for(j=0;j<G.vex;j++) printf ("%3d ",G.arcs[i][j].adj); printf("
"); } } void prim(Mgraph G,int v) /// { int i,j,k,min; k=Locatevex(G,v); for (i=0;i<=G.vex;i++) if (i!=k) { edge[i].adj=v; edge[i].low=G.arcs[k][i].adj; } edge[k].low=0; for (i=1;i<G.vex;i++) { min=100; for (j=0;j<=G.vex;j++) if (edge[j].low&&edge[j].low<min) { min=edge[j].low; k=j; } printf("(%d-%d) :%d
",edge[k].adj,G.vexs[k],min); edge[k].low=0; for (j=0;j<=G.vex;j++) if (edge[j].low&&G.arcs[k][j].adj<edge[j].low) { edge[j].low=G.arcs[k][j].adj; edge[j].adj=G.vexs[k]; } } } int main () { Mgraph G; CreateGraph(G); printf(" :
"); prim(G,1); return 0; }