求解,魔兽世界,随机组队的算法

qw317079258 2014-04-01 03:36:14
一个队伍5个人,需要1个坦克,1个治疗,3个输出。玩家排队的时候需要选择扮演一个角色,可以多选,比如你可以设定自己能扮演坦克,和输出。系统需要把不同的玩家组成一个合格的队伍。 穷举法是可以解决的,但是太笨。有没有更好的方法?
...全文
235 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo928843007 2014-04-01
  • 打赏
  • 举报
回复
用有多个不同职责队列来处理,排队你不可能随机选出来吧,别人排了很久都没排进怎么办。可以参考操作系统的调度算法(虽然不尽相同,这个还是很有用的)。
赵4老师 2014-04-01
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
    srand(time(NULL));
    printf("shuffle 0..n-1 demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */
            for (i=n;i>0;i--) {/* 打乱0~n-1 */
                a=i-1;b=rand()%i;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=0;i<n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
    printf("shuffle 1..n demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */
            for (i=n;i>1;i--) {/* 打乱1~n */
                a=i;b=rand()%i+1;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=1;i<=n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
}
xiaohuh421 2014-04-01
  • 打赏
  • 举报
回复
随机选择, 就是随机选择啊, 又不需要例出全部可能性. 比如最坏的情况, 两个队, 共10人, 10个人都觉得自己什么职业都玩得好. 那么就会每个职业都有10个人可以选择. 首先选择坦克, 随机从10个人中选择一个作为A队, 再随机从剩下的9人中选择一个作B队. 再选择治疗: 随机从8人中选择一人做A队治疗, 再随机从剩下7人中选择一个作B队治疗. 再选择输出: 也是同理. 相当于一个数组, 随机一个索引去取里面的数即可. 不需要穷举. 可能是我理解错了你的意思.

3,881

社区成员

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

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