| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 381 人关注过本帖
标题:菜鸟一枚请教大虾们一个问题
只看楼主 加入收藏
luyang_0612
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-5-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
菜鸟一枚请教大虾们一个问题
本人有个问题想要请教大家。。 就是 给你一个N*N的矩阵。怎么样找出不同行不同列的N个数的和。使他最小,为了简化问题,可以实现时不用最小,但是不能超过10W。  我在思考中,想到了运筹的运输问题,用匈牙利算法。。但是对于编程,小弟愚笨,不知道该如何用C语言实现,现特求各位大虾们帮帮我,最好有具体的实现程序,然后我再去一点点的琢磨每条语句都在干什么。谢谢大仙们!!

PS。我的一个同学给我个套程序,但是无法运行,大虾们可以看看这段在哪出错了,帮我修改下。。谢谢啦!!!万分感谢这里的大虾们
#include <stdio.h>
#include <time.h>
#include <conio.h>
main()
{
   #define MAX 100  //随机数最大数
   printf("输入n:");
   srand(time(NULL));
   int **k,*k2,i=0,j=0,n,max=0;//k:二维数组,k2:存储行列数和,i,j:循环数,n:行列,max:最大数
   k2=(int)malloc(2*n*sizeof(int));//分配2n个空间存储各行列的和
   scanf("%d",&n);//输入n
   k=(int **)malloc(n*sizeof(int*));//分配n行
   for(;i<n;i++){
      *(k+i)=(int*)malloc(n*sizeof(int));//分配给每行n列
      k2[i]=0;
      k2[i+n]=0;
   }

   
   for(i=0;i<n;i++){
    for(j=0;j<n;j++){
    *(*(k+i)+j)=rand()%(MAX+1);//分配给矩阵Max及以内的数
    printf("%3d ",k[i][j]);  
    }
    printf("\n");//每行换
   }
   for(i=0;i<n;i++){
    for(j=0;j<n;j++){
   
    k2[i]+=k[i][j];//横向累加
    k2[i+n]+=k[j][i];//竖向累加
    }
    (k2[i]>k2[i+n])?(k2[i]>max?(max=k2[i]):(max=max)):((k2[i+n]>max)?(max=k2[i+n]):(max=max));//单次对比寻找最大数
   }
   
   for((i=0),(printf("横向 竖向\n"));i<n;i++)//格式化输出
      printf("%-4d  %-4d\n",k2[i],k2[i+n]);

    //释放内存权限
    free(k2);
    k2=NULL;
    for(i=0;i<n;i++){
     free(*(k+i));
     *(k+i)=NULL;
    }
   
   printf("The Max:%d",max);
   getch();
}
搜索更多相关主题的帖子: 匈牙利 C语言 
2011-05-29 00:46
记叙、继续
Rank: 4
等 级:业余侠客
帖 子:56
专家分:226
注 册:2011-5-17
收藏
得分:20 
我是跨界帮顶
2011-05-29 02:38
快速回复:菜鸟一枚请教大虾们一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011833 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved