社区
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
怎么来实现??
不能直接打印出来!
...全文
257
6
打赏
收藏
求最简单的穷举算法
打印0 1 2排列的每一种情况 效果如下: 0 1 2 0 2 1 1 0 2 1 2 0 2 0 1 2 1 0 怎么来实现?? 不能直接打印出来!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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、什么是
穷举
?
穷举
算法
是最
简单
的一种
算法
,其依赖于计算机的强大计算能力,来穷尽每一种可能的情况,从而达到
求
解问题的目的。
穷举
算法
效率并不高,但适用于一些没有明显规律可循的场景。
穷举
的基本思想是从所有可能的情况中搜索正确的答案,在使用
穷举
算法
时,需要明确问题的答案的范围,这样才可以在指定范围内搜索答案。指定范围之后,就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得到需要的正确答案。其执行步骤如下: (1). 对于一种可能的情况,计算其结果; (2).判断结果是否满足要
求
,如果不.
穷举
算法
先来了解一下什么是
穷举
算法
:
穷举
算法
是一种最
简单
的一种
算法
,其依赖于计算机的强大计算能力来穷尽每一种可能的情况,从而达到
求
解的目的。
穷举
算法
效率不高,但适用于一些没有明显规律可循的场合。
穷举
算法
的基本思想: 1.对于一种可能的情况,计算其结果。 2.判断结果是否满足要
求
,如果不满足,则执行第(1)步来搜索下一个可能的情况;如果满足要
求
,则表 示找到正确答案。 下面来...
算法
(Java随笔)—
穷举
算法
穷举
算法
(Exhaustive Attack method)——是最
简单
的一种
算法
,对一个问题的
求
解,穷尽每一种可能;
算法
效率不高,但使用于一些没有规律的场合。
穷举
算法
的基本思想就是从所有可能的情况中搜索正确的答案,使用循环语句和条件判断语句逐步验证每一种可能的正确性,从而得到正确的答案。 概述(来源百度):
穷举
法是一种针对于密码的破译方法。这种方法很像数学上的“完全归纳法”并在密码破译...
简析
穷举
算法
,及其
简单
应用
简析
穷举
算法
,及其
简单
应用
穷举
概述
穷举
法又称列举法,其基本思想是逐一列举问题所涉及的所有情况。
穷举
法常用于解决“是否存在”或“有多少种可能”等问题。 应用
穷举
法时应注意对问题所涉及的有限种情形须一一列举,既不能重复,又不能遗漏。
穷举
通常应用循环结构来实现。在循环体中,应用选择结构实施判断筛选,
求
得所要
求
的解。虽然巧妙和高效的
算法
很少来自
穷举
,但
穷举
设计作为一种常用的基础
算法
也很有意义: (1
C语言
70,020
社区成员
243,265
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章