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


IP属地:广东来自Android客户端1楼2016-04-27 00:35回复
    一摊小超


    星座王
    点亮12星座印记,去领取
    活动截止:2100-01-01
    去徽章馆》
    IP属地:湖北来自Android客户端2楼2016-05-09 02:31
    收起回复
      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
            回复