社区
C语言
帖子详情
求最简单的穷举算法
zoehugh
2006-12-06 08:45:25
打印0 1 2排列的每一种情况
效果如下:
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
怎么来实现??
不能直接打印出来!
...全文
252
6
打赏
收藏
求最简单的穷举算法
打印0 1 2排列的每一种情况 效果如下: 0 1 2 0 2 1 1 0 2 1 2 0 2 0 1 2 1 0 怎么来实现?? 不能直接打印出来!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
picoolo1124
2006-12-07
打赏
举报
回复
#include <iostream>
#define LEN 4
using namespace std;
struct NODE
{
int data;
bool selected;
};
static NODE node[LEN];
static buffer[LEN];
static step;
void init( )
{
for( int i=0; i<LEN; ++i )
{
buffer[i] = 0;
node[i].data = i;
node[i].selected = false;
}
}
void P( )
{
int count = 0;
if( step == LEN )
{
for( int i=0; i<LEN; ++i )
{
cout << buffer[i] << ' ';
}
cout << endl;
}
else
{
for( int i=0; i<LEN; ++i )
{
if( node[i].selected == true )
{
continue;
}
else
{
buffer[step] = i;
node[i].selected = true;
++count;
++step;
P( );
--step;
if( ( count+step) <= LEN )
{
node[i].selected = false;
}
}
}
}
}
int tmain()
{
for(int i=0; i<LEN; ++i )
{
init();
buffer[0] = i;
node[i].selected = true;
step = 1;
P( );
}
system("Pause");
return 0;
}
Alan_lz
2006-12-06
打赏
举报
回复
一般说来,递归的程序写起来是比较简单的。
用了递归,主要的目的是,可以满足n为任意数。
如果n比较大,我的程序运行比较慢是因为要输出的愿意。
可以用print2()试一下。程序很快就会结束。
如下:
#include <stdio.h>
#include <memory.h>
#define N 10
int flag[N];
int n;
int stack[N];
int top;
void print1()
{
int i;
for (i = 0; i < n; i++)
printf("%d ", stack[i]);
printf("\n");
}
void print2()
{
int i;
for (i = 0; i < n; i++)
;
}
void fun()
{
int i;
if (top == n-1)
{
print1();
return;
}
for (i = 0; i < n; i++)
{
if(flag[i] == 0)
{
flag[i] = 1;
stack[++top] = i;
fun();
top--;
flag[i] = 0;
}
}
}
void main()
{
memset(flag, 0, sizeof(int) * N);
//scanf("%d", &n);
n = 5;
top = -1;
fun();
}
pluton
2006-12-06
打赏
举报
回复
//粗写了下,a[]可以换成手动输入
#include <stdio.h>
int flag[3];
int a[3] = {0,1,2};
void print(int b[],int n)
{
int i;
if(n==3)
{
for(i=0;i<3;i++)
{
printf("%d ",b[i]);
}
printf("\n");
return ;
}
for(i=0;i<3;i++)
{
if(flag[i] == 0)
{
flag[i] = 1;
b[n] = a[i];
print(b,n+1);
flag[i] = 0;
}
}
}
int main()
{
int b[3];
int i;
for(i=0;i<3;i++)
{
flag[i] = 1;
b[0] = a[i];
print(b,1);
flag[i] = 0;
}
return 0;
}
zoehugh
2006-12-06
打赏
举报
回复
如果用这样的算法算0-10的穷举不是吓死人.0-100更恐怖!
picoolo1124
2006-12-06
打赏
举报
回复
#include <iostream>
using namespace std;
int main()
{
int array[3]={0,1,2};
int i,j,k;
for( i=0; i < 3; ++i)
{
for( j=0; j < 3; ++j)
{
if( array[j] == array[i] )
continue;
for( k=0; k < 3; ++k)
{
if( array[k] == array[j] || array[k] == array[i] )
continue;
cout << array[i] << ' '
<< array[j] << ' '
<< array[k] <<endl;
}
}
}
system("Pause");
return 0;
}
输出:
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
zoehugh
2006-12-06
打赏
举报
回复
怎么没有人进来看看?
【基本
算法
】
穷举
算法
穷举
算法
是最
简单
的一种
算法
,其依赖于计算机的强大计算能力,来穷尽每一种可能的情况,从而达到
求
解问题的目的。
穷举
算法
效率并不高,但适用于一些没有明显规律可循的场景。
穷举
的基本思想是从所有可能的情况中...
穷举
算法
穷举
算法
是一种最
简单
的一种
算法
,其依赖于计算机的强大计算能力来穷尽每一种可能的情况,从而达到
求
解的目的。
穷举
算法
效率不高,但适用于一些没有明显规律可循的场合。
穷举
算法
的基本思想: 1.对于一种...
算法
(Java随笔)—
穷举
算法
穷举
算法
(Exhaustive Attack method)——是最
简单
的一种
算法
,对一个问题的
求
解,穷尽每一种可能;
算法
效率不高,但使用于一些没有规律的场合。
穷举
算法
的基本思想就是从所有可能的情况中搜索正确的答案,使用...
算法
-
穷举
算法
-鸡兔同笼
*
穷举
算法
是最基本的
算法
思想,下面通过一个
简单
的例子来分析
穷举
算法
的应用。 * 鸡兔同笼问题最早记载于1500年前的《孙子算经》,这是我国古代一个非常有名的问题。鸡兔同笼的原文如下: * 今有鸡兔同笼,上有...
算法
学习笔记之
穷举
算法
算法
学习笔记之
穷举
算法
C语言
69,382
社区成员
243,074
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章