6*6阵列问题

sgdlihongwei 2005-06-28 08:50:21
问题:一个6*6的整数矩阵(比如数组int a[6][6]),从中取出6个数,这6个数处在不同行不同列中,使得6个数的和最大,写出算法输出这6个数的位置。
我自己用回溯法写了一天了,也不知道哪里有问题,没有写出来。请教高手具体给出个代码来,最好是c格式的。不胜感激!
...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
foochow 2005-06-29
  • 打赏
  • 举报
回复
//这个不是和N皇后问题差不多~~~~~
//数组数据随机生成的,你改成固定的就可以
#include<iostream>
#include<ctime>
using namespace std;
const int n=6;
int col[n+1];
int b[n+1];
int d[n+1];
int main()
{
int a[n][n];
int i,j;
srand(time(0));
for(i=0;i<n;++i)
for(j=0;j<n;++j)a[i][j]=rand()%20;
for(i=0;i<=n;++i)b[i]=1;
int good=1,m=1;
col[1]=1,col[0]=0;
int temp=0;
do{
if(good)
{
if(m==n)
{
int tent=0;
for(j=1;j<=n;++j)tent+=a[col[j]-1][j-1];
if(tent>temp)
{
temp=tent;
memcpy(d,col,sizeof(col));
}
while(col[m]==n)
{
--m;
b[col[m]]=1;
}
col[m]++;
}
else
{
b[col[m]]=0;
col[++m]=1;
}
}
else
{
while(col[m]==n)
{
--m;
b[col[m]]=1;
}
col[m]++;
}
good=b[col[m]];
}while(m!=0);
cout<<"列"<<" "<<"行"<<endl;
for(j=1;j<=n;++j)cout<<j<<" "<<d[j]<<"\n";
cout<<endl;
cout<<"和为:"<<temp<<endl;
for(j=1;j<=n;++j)cout<<a[d[j]-1][j-1]<<" ";
cout<<endl;
system("PAUSE");
return 0;
}
herryhuang 2005-06-29
  • 打赏
  • 举报
回复
他的这个算法事实上就是穷举了一遍,
sgdlihongwei 2005-06-29
  • 打赏
  • 举报
回复
to Herry兄弟,这个不是作业贴了。这个是匈牙利匹配算法的一个子模块。如果用穷举的话,那么算法的优势就无从体现了。
sgdlihongwei 2005-06-29
  • 打赏
  • 举报
回复
too 感谢恰似你的温柔兄弟!!
herryhuang 2005-06-28
  • 打赏
  • 举报
回复
穷举!你写了一天?代码在哪儿,贴上来,现在新规矩,凡是说自己没做出来的,都要贴代码,要不就是作业贴。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧