Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65654
  • 博文数量: 12
  • 博客积分: 230
  • 博客等级: 入伍新兵
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-22 13:20
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: C/C++

2012-03-29 20:29:45

图的基本运算:
           第一邻接点取法;函数实现
                                   FirstAdj(G , u)
           取下一邻接点取法;函数实现;
                                   NextAdj(G, u , w);
                                   取的是G中定点u关于定点w的下一邻接点;

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. #define N 6
  3. #define M (1 << 20) //相对输入权重为无穷大权重;

  4. int FirstAdj(int matrix[][N],int v)
  5. {
  6.     int i;
  7.     
  8.     if(v < 0 || v > N-1) //判读输入是否合法;
  9.         return -1;

  10.     for(i = 0; i< N ; i ++)
  11.     {
  12.         if(matrix[v][i] == 1)    //碰到权重为1,就返回其下标;
  13.             return i;
  14.     }

  15.     return -2;        //如果返回不为-1,也不是0 - N之间的数,那么就是没有第一邻接点!
  16. }

  1. int NextAdj(int matrix[][N],int v ,int u)
  2. {
  3.     if(v < 0 || v > N-1 || u < 0 || u > N -1)
  4.     {
  5.         return -1;
  6.     }

  7.     int i;

  8.     for(i = u + 1 ;i < N ; i ++)
  9.     {
  10.         if(matrix[v][i] == 1) //这里是找到权重唯一为1的图的顶点下标;只为测试,与输入配合;
  11.             return i;
  12.     }

  13.     return -2;
  14.         
  15. }

  16. int main()
  17. {
  18.     int matrix[N][N];
  19.     int i,j,w;

  20.     for(i= 0; i< N;i ++)
  21.         for(j = 0;j < N ; j++)
  22.             matrix[i][j]=M; //所有的权重均初始化为无穷大权重!
  23.         

  24.     printf("intput the edge:(i , j , w)(i = j to exit )\n");

  25.     while(1)
  26.     {
  27.         scanf("%d,%d,%d",&i ,& j , & w);
  28.         if(i == j)
  29.             break;
  30.         matrix[i][j] = matrix[j][i] = w; //所有自己与自己建边的地方置为无穷大权重;       
  31.     }

  32.     for(i = 0 ; i < N ;i ++)
  33.     {
  34.         //printf("V%d : " , i);
  35.         for(j = 0; j< N ; j++)
  36.         {
  37.             if(matrix[i][j] < M)  //打印所有非无穷大权重边;
  38.                 printf("V%d->V%d = %d " , i , j, matrix[i][j]);
  39.         }

  40.         printf("\n");
  41.     }

  42.     printf("V0 FirstAdj is :%d\n" , FirstAdj(matrix,0));//直接找到0行的第一临接点;
  43.     printf("V NextAdj u is :%d\n" , NextAdj(matrix,0,2)); //相对第0行相对第2个节点的下一                                                           //个临接点
  44. }
阅读(1291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~