关于OpenMP并行问题

J129 2013-07-08 11:25:11
在程序中 有多个循环迭代,用于解决组合问题,如:从n个字母中选择m个的全部组合形式;这个代码用串行已经解决,但是n和m增大时,组合数会急速增多,处理时间很长,想用OpenMP并行加速,请各位大神帮忙解决,不胜感激!
循环方式是:
for()
{
for()
{
for()
{
.
.
.
}
}
}
...全文
231 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-07-08
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m,int n) {
    int i,j;

    for (i=m;i>=n;i--) {
        comb[n]=i; /* 选择当前的“头”元素 */
        if (n>1) {
            combination(i-1,n-1); /* 进入下一次更小的组合问题 */
        } else { /* 满了需要的组合数,输出 */
            for (j=comb[0];j>0;j--) printf("%c",'A'+c1-comb[j]);
            printf("\n");
        }
    }
    return;
}
int main(int argc,char **argv) {
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 1;
    }
    c1=atoi(argv[1]);
    if (c1<1 || MAX_NUM<c1) {
        printf("1<=组合下标<=%d\n",MAX_NUM);
        return 2;
    }
    c2=atoi(argv[2]);
    if (c2<1 || c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 3;
    }
    comb[0]=c2;
    combination(c1,c2);
    return 0;
}

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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