排列组合问题 用C语言解决的

有十个位置固定盒子,现在这里有十个不同的球(1,2,3,4,5,6,7,8,9,10)要求打印出排列球放入到盒子的所有情况请问算法是什么呢、?谢谢了... 有十个位置固定盒子, 现在这里有十个不同的球( 1,2,3,4,5,6,7,8,9,10 )要求打印出排列球放入到盒子的所有情况 请问算法是什么呢、?谢谢了 展开
 我来答
limengchengg
2009-04-29
知道答主
回答量:28
采纳率:0%
帮助的人:16.5万
展开全部
使用回朔算法么~
具体实现代码如下
#include <stdio.h>
#include <iostream>

using namespace std;

#define iCount 10

int iv_Num[iCount];
float fDebug;

void algorithm(int iNum[iCount], int iNow);

bool judge(int iNum[iCount]);

void Sort(int iNum[iCount]);

void main()
{
for(int i=0;i<iCount;i++)
iv_Num[i]=0;
fDebug = 0;
algorithm(iv_Num, 0);
cout<<fDebug<<endl;
system("pause");
}

void algorithm(int iNum[iCount], int iNow)
{
int iTemp;
int j;
iTemp = iNum[iNow];
if(iNow>iCount-1)
{
for(int iOut=0; iOut<iCount; iOut++ )
cout<<iNum[iOut]<<"\t";
cout<<endl;
fDebug++;
iNum[iNow-1] = iTemp;
}
else
{
for(j=1; j<iCount+1; j++)
{
iNum[iNow] = j;
if(judge(iNum))
{
algorithm(iNum, iNow+1);
iNum[iNow] = iTemp;
}
else
iNum[iNow] = iTemp;
}
}
}

bool judge(int iNum[iCount])
{
int iBuffer[iCount];
for(int iN=0; iN<iCount; iN++)
iBuffer[iN] = iNum[iN];
Sort(iBuffer);
for(int i=0;i<iCount-1;i++)
{
if(iBuffer[i] == 0)
continue;
else if(iBuffer[i] == iBuffer[i+1])
return false;
}
return true;
}

void Sort(int iNum[iCount])
{
int iTemp;
for(int i=0;i<iCount;i++)
{
for(int j=i+1;j<iCount;j++)
{
if(iNum[i]>iNum[j])
{
iTemp = iNum[i];
iNum[i] = iNum[j];
iNum[j] = iTemp;
}
}
}
}

更改iCount的宏定义 就可以算其他数量的排列了
fDebug为排列的总数(我自己用来检查总数对不对用的)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niinor
2009-04-29 · TA获得超过2246个赞
知道小有建树答主
回答量:2047
采纳率:0%
帮助的人:1354万
展开全部
穷举...
希望有人能有更好的办法...

我这里有3个盒子,每个盒子里有编号的3个球1,2,3
每次拿出一个球
打印出所有球的组合...

除了3个for还有没有更好的方法?
因为...如果需要扩充...就要把整个程序都重写...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6eed2f8
2009-04-29 · TA获得超过5082个赞
知道大有可为答主
回答量:3423
采纳率:0%
帮助的人:3803万
展开全部
嵌套for循环就行啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
juerlve
2009-04-29
知道答主
回答量:22
采纳率:0%
帮助的人:15.8万
展开全部
用枚举树
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式