社区
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
怎么来实现??
不能直接打印出来!
...全文
292
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
打赏
举报
回复
怎么没有人进来看看?
常见
算法
思想——
穷举
法
本文详细介绍了
穷举
算法
的思路,其特点及如何通过优化减少无用计算。以
求
解三位数和为6的数字个数为例,展示了完整的代码实现。重点讨论了
穷举
法的优缺点和常见优化策略。
【
算法
】最直接的
算法
——
穷举
法详解
文章介绍了
穷举
法作为一种基础的
算法
思想,尽管效率通常较低,但能解决许多计算问题。在查找领域,
穷举
法体现在顺序匹配和KMP
算法
,后者通过部分匹配值避免了回溯,提高了效率。排序问题中提到了选择排序和冒泡排序,两者都是O(n^2)的时间复杂度。此外,
穷举
法还应用于组合问题如01背包问题和图问题如哈密顿回路与旅行商问题,以及几何问题的最近点对和凸包问题。
【NOI】C++
算法
设计入门之
穷举
本文介绍C++中的
穷举
算法
,涵盖基本概念、步骤及通过具体例题的解析,适合初学者理解与实践。从
简单
穷举
到嵌套
穷举
,探讨
算法
在解决实际问题中的应用。
[
算法
]用两种
求
质数的
算法
(
穷举
法,筛选法),C语言实现
这篇博客介绍了两种
求
质数的
算法
:
穷举
法和筛选法,用C语言实现。
穷举
法通过不断除以小于数的平方根判断质数,时间复杂度为O(N * sqrt(N))。筛选法则通过筛选数组中的质数,避免了重复计算,时间复杂度为O(N * LogN),适用于大范围
求
质数。
【基本
算法
】
穷举
算法
本文介绍了
穷举
算法
的概念和工作原理,通过鸡兔同笼和百钱买百鸡问题展示了
穷举
法的运用。尽管
穷举
算法
效率低下,但在无明显规律的场景中仍有一定价值。同时,文章指出了
穷举
法的优缺点,并提供了Java代码实现。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章