#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <Windows.h>
#include <time.h>
#include "unistd.h"
#define NumberOfAnts 5//定义蚂蚁数量的常量
///想要尝试其他数量蚂蚁的可以自行修改这里的数字
char Map[21][21];//储存地图数据
int Num[21][21];//储存各个位置有多少蚂蚁
void Print(char chMap[21][21],int Dime);
/*将结果输出到屏幕上*/
void Calculate_1(int X[NumberOfAnts]);
void Calculate_2(int X[NumberOfAnts],int Y[NumberOfAnts]);
int main(void)
{
int Ant_X[NumberOfAnts];
int Ant_Y[NumberOfAnts];
/*定义蚂蚁的x、y变量并将其放在坐标轴中央*/
int Dimension = 0;//用户需要输入的维度
for (int i = 0; i < NumberOfAnts; i++)
Ant_X[i] = Ant_Y[i] = 10;
for (int i = 0; i < 21; i++)
for (int j = 0; j < 21; j++)
{
Map[i][j] = ' ';//初始化
Num[i][j] = 0;
}
WrongInputToBack://如果输入错误,则跳回到这里
printf_s("\033[35m>\033[32mPlease input the dimension you want to imitate:\033[0m");
scanf_s("%d", &Dimension);//提示用户输入需要模拟的维度
switch (Dimension)
{
case 1:
{//一位坐标轴模拟
do {
Calculate_1(Ant_X);
Sleep(1000);
} while (1);
break;
}
case 2:
{//二位坐标系模拟
do {
Calculate_2(Ant_X, Ant_Y);
Sleep(1000);
} while (1);
break;
}
default:
printf_s("\033[35m>\033[31mYour input is not allowed!Please input 1 or 2.\033[0m\n");
goto WrongInputToBack;
}
return 0;
}
void Print(char chMap[21][21], int Dime)
{/*将结果输出到屏幕上*/
switch (Dime)
{
case 1:
printf_s("\033[36m\t\t\t\t\t\t\t\t\t\t\t\t ┃\n\033[0m");
for (int i = 0; i < 21; i++)
{
if ((Map[0][i] == '-') || (Map[0][i] == '>') || (Map[0][i] == '+'))
printf_s("%c", Map[0][i]);
if (Map[0][i]=='*')
switch (Num[0][i])
{
case 1://一只蚂蚁就正常白色
printf_s("\033[0m%c\033[0m", Map[0][i]);
break;
case 2://两只蚂蚁堆叠用黄色表示
printf_s("\033[33m%c\033[0m", Map[0][i]);
break;
case 3://三只蚂蚁堆叠用绿色表示
printf_s("\033[32m%c\033[0m", Map[0][i]);
break;
case 4://四只蚂蚁堆叠用紫色表示
printf_s("\033[35m%c\033[0m", Map[0][i]);
break;
default://五只及以上蚂蚁堆叠用红色表示
printf_s("\033[31m%c\033[0m", Map[0][i]);
break;
}
}
printf_s("\t\033[0m*\033[36m:1 ant \t\033[33m*\033[36m:2 ants\t\033[32m*\033[36m:3 ants\t\033[35m*\033[36m:4 ants\t\033[31m*\033[36m:5+ ants ┃");
printf_s("\n\033[36m\t\t\t\t\t\t\t\t\t\t\t\t ┃\n");
printf_s("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n\033[0m");
//一维输出到这里结束
break;
case 2:
printf_s("\033[36m\t\t\t\t\t\t\t┃\n\033[0m");
for (int i = 0; i < 21; i++)
{
for (int j = 0; j < 21; j++)
{
if ((Map[i][j] == '-') || (Map[i][j] == '>') || (Map[i][j] == '+') || (Map[i][j] == '|') || (Map[i][j] == ' ') || (Map[i][j] == '^'))
printf_s("%c", Map[i][j]);
if (Map[i][j] == '*')
switch (Num[i][j])
{
case 1://一只蚂蚁就正常白色
printf_s("\033[0m%c\033[0m", Map[i][j]);
break;
case 2://两只蚂蚁堆叠用黄色表示
printf_s("\033[33m%c\033[0m", Map[i][j]);
break;
case 3://三只蚂蚁堆叠用绿色表示
printf_s("\033[32m%c\033[0m", Map[i][j]);
break;
case 4://四只蚂蚁堆叠用紫色表示
printf_s("\033[35m%c\033[0m", Map[i][j]);
break;
default://五只及以上蚂蚁堆叠用红色表示
printf_s("\033[31m%c\033[0m", Map[i][j]);
break;
}
}
if (i >= 0 && i <= 4)
{
switch (i)
{
case 0:
printf_s("\t\t\033[0m*\033[36m:1 ant \033[36m\t\t┃\n\033[0m");
break;
case 1:
printf_s("\t\t\033[33m*\033[36m:2 ants\033[36m\t\t┃\n\033[0m");
break;
case 2:
printf_s("\t\t\033[32m*\033[36m:3 ants\033[36m\t\t┃\n\033[0m");
break;
case 3:
printf_s("\t\t\033[35m*\033[36m:4 ants\033[36m\t\t┃\n\033[0m");
break;
case 4:
printf_s("\t\t\033[31m*\033[36m:5+ ants\033[36m\t\t┃\n\033[0m");
break;
}
}
else printf_s("\t\t\t\t\t\033[36m┃\n\033[0m");
}
printf_s("\033[36m\t\t\t\t\t\t\t┃\n");
printf_s("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n\033[0m");
break;
}
for (int i=0;i<21;i++)
for (int j = 0; j < 21; j++)
{
Map[i][j] = ' ';
Num[i][j] = 0;
}//每次运行都进行初始化,否则会出问题
return;
}
void Calculate_1(int X[NumberOfAnts])
{/*对一维模拟的运算*/
srand(time(NULL)); // 初始化随机数种子
int random_num = rand(); // 生成随机数
for (int i = 0; i < NumberOfAnts; i++)
{
random_num = rand();
random_num %= 2;//对2取模得到0或1
if (random_num == 1)//1则向右走
{
if (X[i]==10)
Map[0][X[i]] = '+';
else if ((X[i] >= 0) && (X[i] <= 20)) Map[0][X[i]] = '-';
X[i]++;
if ((X[i] >= 0) && (X[i] <= 20)) Map[0][X[i]] = '*';
}
else
{//0则向左走
if (X[i] == 10)
Map[0][X[i]] = '+';
else if ((X[i] >= 0) && (X[i] <= 20))Map[0][X[i]] = '-';
X[i]--;
if ((X[i] >= 0) && (X[i] <= 20)) Map[0][X[i]] = '*';
}
}//以上完成了5只蚂蚁的一位模拟
//接下来将一维坐标轴的各位记录统计
for (int i = 0; i < NumberOfAnts; i++)
if ((X[i] >= 0) && (X[i] <= 20))
Num[0][X[i]]++;
for (int i = 0; i < 21; i++)
if (Map[0][i] == ' ')
Map[0][i] = '-';
Map[0][20] = '>';
if (Map[0][10] != '*') Map[0][10] = '+';
Print(Map, 1);//调用函数进行输出
return;
}
void Calculate_2(int X[NumberOfAnts], int Y[NumberOfAnts])
{/*对二维模拟的运算*/
srand(time(NULL)); // 初始化随机数种子
int random_num = rand(); // 生成随机数
for (int i = 0; i < NumberOfAnts; i++)
{
random_num = rand();
random_num %= 2;//得到0或1
switch (random_num)
{
case 0://如果得到0,则在y轴方向移动
{
random_num = rand(); // 生成随机数
random_num %= 2;//得到0或1
/*再次生成随机数以确定向上还是向下*/
switch (random_num)
{
case 1://1则向上运动
{
if ((Y[i] == 10) && (X[i] == 10))
{
Map[Y[i]][X[i]] = '+';
}//注意第一维度是y轴,第二维度是x轴
else if (X[i]==10 && Y[i]>=0 && Y[i]<=10) Map[Y[i]][X[i]] = '|';
else if ((X[i] >= 0) && (X[i] <= 20) && (Y[i] >= 0) && (Y[i] <= 20)) Map[Y[i]][X[i]] = ' ';
Y[i]++;
if ((X[i] >= 0) && (X[i] <= 20) && (Y[i] >= 0) && (Y[i] <= 20)) Map[Y[i]][X[i]] = '*';
break;
}
case 0://0则向下运动
{
if ((Y[i] == 10) && (X[i] == 10))
{
Map[Y[i]][X[i]] = '+';
}//注意第一维度是y轴,第二维度是x轴
else if (X[i] == 10 && Y[i] >= 0 && Y[i] <= 10) Map[Y[i]][X[i]] = '|';
else if ((X[i] >= 0) && (X[i] <= 20) && (Y[i] >= 0) && (Y[i] <= 20)) Map[Y[i]][X[i]] = ' ';
Y[i]--;
if ((X[i] >= 0) && (X[i] <= 20) && (Y[i] >= 0) && (Y[i] <= 20)) Map[Y[i]][X[i]] = '*';
break;
}
}
break;
}
case 1://如果得到1,则在x轴方向移动
{
random_num = rand(); // 生成随机数
random_num %= 2;//得到0或1
/*再次生成随机数以确定向右还是向左*/
switch (random_num)
{
case 1://1则向右运动
{
if ((Y[i] == 10
C语言简单模拟高斯的蚂蚁:随机游走问题(图形化)
需积分: 0 169 浏览量
2023-11-01
19:10:37
上传
评论
收藏 28.33MB ZIP 举报
青が絶える(青绝悲)
- 粉丝: 611
- 资源: 15
最新资源
- TensorFlow 识别手写文字代码.rar
- 使用redis构建简单的社交网站-model-for-netwo开发笔记
- 神经网络aper-开发笔记
- 树状数组-2023C-m开发笔记
- mysql多表联合查询案例
- IMG20240609013653.jpg
- 分别通过BP神经网络和GRNN广义回归神经网络对电力负荷数据进行训练和预测matlab仿真,包括程序,注释,操作步骤
- 基于图像纹理特征提取的图像分割算法matlab仿真,包括程序,注释,操作步骤
- Spring Boot整合Redis通过Zset数据类型+定时任务实现延迟队列教程对应源码
- 创意互动:HTML+CSS+JS打造《三维端午节动态文字秀》大屏特效
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈