c语言蚂蚁
① C语言编程
#include <stdlib.h>
#include <Windows.h>
#include <conio.h>
typedef int elemtype;
typedef struct DuLNode //定义结点类型
{
elemtype data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode, *Dulinklist;
Dulinklist initlist() //初始化双向链表
{
Dulinklist L;
L = (Dulinklist)malloc(sizeof(DuLNode)); //表头附加结点
if (!L) exit(-2);
L->data = 0;
L->next = NULL;
L->prior =NULL;
return L;
}//初始化了一个空表
void createlist(Dulinklist *L) //尾插法生成双向链表
{
Dulinklist p, t;
t = *L;
printf("尾插法:请输入双向链表节点值,以输入0结束。\n");
scanf("%d", &t->data);
while (t->data != 0)
{
p = (Dulinklist)malloc(sizeof(DuLNode));
if (!p) exit(-2);
t->next = p;
p->prior = t;
scanf("%d", &p->data);
t = p;
}
t ->next= NULL;
/*(*L)->prior = t->prior;
t->prior->next = (*L);*/
}
void print_list(Dulinklist L)
//通过链表的遍历来输出链表中的信息
{
int i;
Dulinklist p;
printf("双向链表为:\nhead");
for (p = L, i = 1; p!= NULL; p = p->next)
{
printf("-> %d<-", p->data);
i++;
}
//printf("-> %d\n", p->data);
printf("\n双向链表的长度为 %d\n\n", i);
}
/*
一趟快速排序的具体做法是:附设两个指针low和high(即第一个和最后一个指针),
他们的初值分别为low和high设枢轴(一般为low的值pivot)记录的关键字
(即本例子中的整形data)为pivot,则首先从high所指位置
起向前搜索到第一个关键字小于pivot的记录和枢轴记录交换,然后从low所指位置起
向后搜索,找到第一个关键字大于pivot的记录和枢轴记录相互交换,重复这两步直
至low = high为止。
*/
Dulinklist partion(Dulinklist pstHead, Dulinklist pstLow, Dulinklist pstHigh)
{
elemtype iTmp = 0;
elemtype pivot = 0;
if (!pstHead)
{
printf("错误,头节点为空!/n");
exit(1);
}
if (!pstHead->next)
{
return pstHead->next;//就一个元素
}
pivot = pstLow->data;
while (pstLow != pstHigh)
{
//从后面往前换
while (pstLow != pstHigh && pstHigh->data >= pivot)
{
pstHigh = pstHigh->prior;
}
//交换high low
iTmp = pstLow->data;
pstLow->data = pstHigh->data;
pstHigh->data = iTmp;
//从前往后换
while (pstLow != pstHigh && pstLow->data <= pivot)
{
pstLow = pstLow->next;
}
//交换high low
iTmp = pstLow->data;
pstLow->data = pstHigh->data;
pstHigh->data = iTmp;
}
return pstLow;
}
//快排
void quick_sort(Dulinklist pstHead, Dulinklist pstLow, Dulinklist pstHigh)
{
Dulinklist pstTmp = NULL;
pstTmp = partion(pstHead, pstLow, pstHigh);
if (pstLow != pstTmp)
{
quick_sort(pstHead, pstLow, pstTmp->prior);
}
if (pstHigh != pstTmp)
{
quick_sort(pstHead, pstTmp->next, pstHigh);
}
}
void main(){
Dulinklist h = initlist(),head,last;
createlist(&h);
print_list(h);
last = h;
while (last->next)
{
last = last->next;
}
quick_sort(h, h->next, last->prior);
print_list(h);
}
② 有没有人用C语言做过‘模拟蚂蚁巢穴’这个程序
咱们来考虑考虑这个游戏规则 好像问题比较严重阿
一没有资源限制
二没有兵种问题 没有克制问题
三也是最重要的 随机决定搏斗结果 而且是一个对一个单挑 这样的话一边100只打另一边50只打完了胜者剩50只 兵力优势方根本没便宜占 也就是说这个游戏里也就没有了阵型的问题
那就变成单纯拼兵了
可是双方造兵的唯一限制是回合数 又不要资源 所以只要都全速造兵 那就是完全均势 谁都赢不了
还有 规则里面一些平衡性设定没有讲清楚
比如蚁巢的生命值 蚁后工蚁在攻击力生命值上的区别 以及棋盘的尺寸等 这些是会影响比赛进程的
比如如果棋盘很小 那双方都会rush 如果棋盘很大 那双方都会扩张 只有棋盘大小适中 这个游戏才有得玩