啪团子吧 关注:11贴子:278
  • 4回复贴,共1


IP属地:广东来自Android客户端1楼2016-04-27 00:35回复
    void creat_graph(int vertice1,int vertice2)
    {
    int weight;
    printf("请输入顶点%d到顶点%d的权值:",vertice1,vertice2);
    scanf("%d",&weight);
    cost[vertice1][vertice2]=weight;
    cost[vertice2][vertice1]=weight;
    }
    void Prim(int edges[][N],int u)
    {
    int v,k,j,min;
    for(v=1;v<=N;v++)
    if(v!=u)
    {
    minedge[v].end=u;
    minedge[v].len=edges[v][u];
    }
    minedge[u].len=0;
    for(k=1;k<N;k++)
    {
    min=minedge[k].len;
    v=k;
    for(j=1;j<=N;j++)
    if(minedge[j].len>0&&minedge[j].len<min)
    {
    min=minedge[j].len;
    v=j;
    }
    if(min==32767)
    {
    printf("图不连通,无生成树!");
    }
    printf("起点:%d,终点:%d;\n",v,minedge[v].end);
    minedge[v].len=-minedge[v].len;
    for(j=1;j<=N;j++)
    if(edges[j][v]<minedge[j].len)
    {
    minedge[j].len=edges[j][v];
    minedge[j].end=v;
    }
    }
    }
    void main()
    {
    int source;
    int destination;
    int i,j;
    for(i=1;i<=M;i++)
    {
    cost[i][j]=8;
    if(j==i) cost[i][j]=0;
    }
    while(1)
    {
    printf("请输入起点和终点:");
    scanf("%d,%d",&source,&destination);
    if(source==-1||destination==-1)
    break;
    if(source==destination)
    printf("错误:自身循环\n");
    else if(source>M||destination>M)
    printf("错误:超出范围\n");
    else
    creat_graph(source,destination);
    }
    printf("********************************\n");
    printf("\n\n#######图的矩阵形式#######\n\n");
    print_graph();
    printf("\n\n##########################\n\n");
    printf("\n\n最小生成树:\n");
    Prim(cost,0);
    printf("\n");
    }


    IP属地:广东3楼2016-05-12 11:52
    回复
      #include"conio.h"
      #include"stdio.h"
      #include"stdlib.h"
      #define M 20
      #define MAX 32767
      void main()
      {
      int cost[M][M];
      int dist[M];
      int pre[M];
      int n,i0,i,j,k,wij;
      void minpath(int n, int cost[M][M],int i0,int *pd,int *pp);
      printf("请输入顶点数和源点序号:");
      scanf("%d,%d",&n,&i0);
      for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
      {
      if(i==j) cost[i][j]=0;
      else cost[i][j]=MAX;
      }
      do
      {
      printf("输入两点及其权值:");
      scanf("%d,%d,%d",&i,&j,&wij);
      if((i!=j)&&(wij!=0)) cost[i][j]=wij;
      }while((i!=j)&&(wij!=0));
      minpath(n,cost,i0,dist,pre);
      for(i=1;i<=n;i++)
      {
      if(i!=i0)
      {
      k=i;
      printf("最短路径:");
      do
      {
      printf("%3d<--",k);
      k=pre[k];
      }while(k!=i0);
      printf("%3d\t\t",i0);
      printf("最短路径长度=%4d\n",dist[i]);
      }
      }
      printf("\n请按任意键继续...");
      getch();
      //或system("pause");
      }/*main*/
      void minpath(int n,int cost[M][M],int i0,int *pd,int *pp)
      {
      int i,u,v,min;
      int s[M];
      printf("源点序号为:");
      printf("%d\n",i0);
      for(i=1;i<=n;i++)
      {
      *(pd+i)=cost[i0][i];
      if(*(pd+i)<MAX) *(pp+i)=i0;
      else*(pp+i)=0;
      }
      for(i=1;i<n;i++) s[i]=0;
      s[i0]=1;
      *(pd+i0)=0;
      {
      min=MAX;
      for(u=1;u<=n;u++)
      if((!s[u]&&(*(pd+u)<min)))
      {
      min=*(pd+u);
      v=u;
      }
      s[v]=1;
      for(u=1;u<=n;u++)
      if((!s[u])&&(*(pd+v)+cost[v][u]<*(pd+u)))
      {
      *(pd+u)=*(pd+v)+cost[v][u];
      *(pp+u)=v;
      }
      }
      for(i=1;i<=n;i++)
      if((!s[i])&&(*(pd+i)=MAX)) *(pp+i)=i0;
      }/*minpatth*/


      IP属地:广东4楼2016-05-19 12:11
      回复
        #include<stdio.h>
        int i,j;
        struct SeqList
        {
        int key;
        }R[10],T[10];
        int SeqSearch(SeqList R[],int k)
        {
        R[0].key=k;
        for(i=9;R[i].key!=k;i--);
        return i;
        }/*SeqSearch*/
        int BinSearch(SeqList T,KeyType t)
        {
        int low = 1,high=n,mid;
        while(low=1,high=n,mid;
        while(low<=high{
        mid=(low+high)/2;
        if(T[mid].key==t) return mid;
        if(T[mid].key>t)
        high=mid-1;
        else
        low=mid+1;
        }
        return 0;
        }
        void arrangement()
        {
        int w,u,t;
        for(w=1;w<=9;w++)
        T[w].key=R[w].key;
        for(w=1;w<=9;w++)
        for(u=1;u<=9-w;u++)
        if(T[u].key>T[u+1].key)
        {
        t=T[u].key;
        T[u].key=T[u+1].key;
        T[u+1].key=t;
        }
        }
        void main()
        {
        int m,k,t;
        printf("请任意输入九个数:");
        for(int j=1;j!='\n';j++)
        scanf("%d",&R[j].key);
        do
        {
        printf(" 1 用顺序查找法查找\n");
        printf(" 2 用二分查找法查找\n");
        printf(" 3 结束程序\n");
        printf(" 请输入你的选择:");
        scanf("%d",&m);
        switch(m)
        {
        case 1:
        {
        printf("请输入你要查找的数");
        scanf("%d",&k);
        t=seqsearch(R,k);
        if(t==0)
        printf("你所查找的数不存在。\n");
        else
        printf("你所查找的数的位置是:%d\n",t);
        }break;
        case 2:
        {
        arrangement();
        printf("请输入你要查找的数:);
        scanf("%d",&k);
        t=binsearch(T,k);
        if(t==0)
        printf(" 你所查找的数不存在。\n");
        else
        printf("你所查找的数的位置是:%d\n",t);
        }
        }
        }while(m==1||m==2);


        IP属地:广东5楼2016-05-26 12:11
        回复
          IP属地:广东6楼2016-06-23 16:02
          回复