【问题标题】:adjacency matrix邻接矩阵
【发布时间】:2010-10-14 14:16:23
【问题描述】:

给定一个图的邻接矩阵和一个正整数n,求两个顶点之间长度为n的路径个数,不知道怎么转成编程?

【问题讨论】:

  • 这非常家庭作业,比programmy更数学
  • 这个地方仍然是一个有效的问题,并明确说明。没有理由拒绝投票和关闭。
  • 您说您在“转换为编程”方面遇到了麻烦。你能告诉我们你拥有的东西吗(换句话说,你试图转换来自的东西,即使它是伪代码或算法的英文描述)以及你在哪里卡住了?

标签: java c++ graph


【解决方案1】:

选择 A^n 然后阅读相应的条目。

如果您希望它对单个顶点更有效,请从第一个顶点开始随机游走 n 次迭代。

【讨论】:

    【解决方案2】:

    我假设这是家庭作业,所以这里有一个提示。如果给你一支铅笔和一张纸,以及一个小的邻接矩阵,将如何计算路径的数量?

    【讨论】:

      【解决方案3】:

      如何使用 Dijkstra 的最短路径算法 (DSPA)?让网络中每条弧线的成本为 1。使用 DSPA 找到两个不同顶点之间的距离。如果长度为 n,则您已找到感兴趣的路径。循环遍历所有顶点对。

      【讨论】:

        【解决方案4】:

        这是我的编码,但我不知道如何找到两个顶点之间的长度路径数。

        #include <stdio.h>
        #include <conio.h>
        #include <stdlib.h>
        #include <math.h>
        #define TRUE 1
        #define FALSE 0
        
        void main()
        {
           int x;            
           int y;
           int n;
           int l;
           int a;
           int b;
           int length;
           char vertex='a';
           int num[50][50];
        
           printf("enter the number of vertices : ");
           scanf("%d",&n);
           //int num[n][n];
        
           for(x=0;x<n;x++)
           {
            for(y=0;y<n;y++)
              {
                printf("[%c,%c] : ",vertex+x,vertex+y);
                 scanf("%d",&num[x][y]);
               }
           }
        
                printf("\n");
        
                printf("Adjacency matrix :\n");
                for(x=0;x<n;x++)
                {
                    for(y=0;y<n;y++)
        
                        printf("%d\t",num[x][y]);
                        printf("\n");
        
                    }
        
                 printf("Enter a positive integer for length: ");
                 scanf("%d",&length);
        
                 length=sqrt(length);
        
                 printf("Multiplication matrix :\n");
              for(l=0;l<=length;l++)
              {
                for(x=0;x<n;x++)
                {
                    for(y=0;y<n;y++)
        
                        num[x][y]=(num[x][y])*(num[y][x]);
                       num[x][y]= num[x][y]+ num[y][x];
        
                    }
               }
        
        
                printf("\n");
        
                for(x=0;x<n;x++)
                {
                    for(y=0;y<n;y++)
        
                        printf("%d\t",num[x][y]);
                        printf("\n");
        
                    }
        
                 printf("\nPlease insert your starting point: ");
                 scanf("%d",&a);
                 printf("\nPlease insert your ending point: ");
                 scanf("%d",&b);
        
                 a=x-1;
                 b=y-1;
        
                 //printf("\nThe number of path from %d to %d: %d",a,b,num[a][b]);
                 printf("\nThe number of path from %d to %d: %d",a,b,num[a][b]);
        
           getch();
           //return 0;
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-04-06
          • 1970-01-01
          • 2022-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-31
          • 1970-01-01
          相关资源
          最近更新 更多