我只会C言语的一些基础。现在要做一个电脑鼠走迷宫。用C言语写程序什么写?需要什么?有什么资料可以借鉴

我只会C言语的一些基础。现在要做一个电脑鼠走迷宫。用C言语写程序什么写?需要什么?有什么资料可以借鉴,第1张

写代码之前,首先要熟悉你所选用的电脑鼠的主控芯片是什么,查找该芯片的开发学习教程迅迹橡,学会之后就能写出电脑鼠的底层驱动程序,然后再写算法,算法移植经典算法即可,电脑鼠常用算法亩旁有洪水算法、蚁群算法、剥洋葱算法等,这些算法直接搜名州汪字即可找到相关资料及例程。

顺便问下,你是在准备明年的电脑鼠走迷宫竞赛吗?我现在在实验室带领我们学校的参赛队制作新的电脑鼠,有兴趣交流一下。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

/*迷宫的数组*/

int maze[100][100]

/*迷宫的行数和列数蔽链*/

int m=7,n=7

/*

*对迷宫进行初始化物并庆,用随机数产生迷宫

*/

void InitMaze()

{

    int i,j,temp

srand((unsigned)time(NULL))

    for(i=1i<=mi++)

        for(j=1j<=nj++)

        {

            temp=rand()%100

            if(temp>30)

            {

                maze[i-1][j-1]=0

            }else

            {

                maze[i-1][j-1]=1

            }

        }

    maze[0][0]=0

    maze[m-1][n-1]=9

}

/*

*定义栈和栈的节点

*/

typedef struct Node

{

int x

int y

struct Node *next

}Node,*Stack

/*

*初始化Stack

*/

void InitStack(Node *Stack)

{

Stack=(Node *)malloc(sizeof(Node))

if(Stack==NULL)

{

  printf("分配空间失败\n")

  exit(0)

}else

{

  Stack->next=NULL

}

}

/*

*压栈

*/

void push(Node *Stack,int x,int y)

{

Node *temp

temp=(Node *)malloc(sizeof(Node))

if (!temp)

{

  printf("分配内存空间错误")

  return

}

else

{

  temp->x=x

  temp->y=y

  temp->next=Stack->next

  Stack->next=temp

}

}

/*

*出栈

*/

void pop(Node *Stack,int *x,int *y)

{

Node *temp

temp=Stack->next

if(!temp){

  return

}else{

  *x=temp->x

  *y=temp->y

}

Stack->next=temp->next

free(temp)

}

/*

*判断栈是否为空

*/

int isEmpty(Node *Stasck)

{

return ((Stasck->next)==NULL)

}

/*

*判断从该点时候可以向其他方向移动,并返回移动的方向

*/

int pass(int i,int j)

{

/*右方向*/

if(j<n-1&&(maze[i][j+1]==0||maze[i][j+1]==9))

{

  return 2

}

/*下方向*/

if(i<m-1&&(maze[i+1][j]==0||maze[i+1][j]==9))

{

  return 3

}

/*左方向*/

if(j>=1&&(maze[i][j-1]==0||maze[i][j-1]==9))

{

  return 4

}

/*上方向*/

if(i>=1&罩握&(maze[i-1][j]==0||maze[i-1][j]==9))

{

  return 5

}

return -1

}

/*

*对迷宫进行打印

*/

void printMaze()

{

int i=0,j=0

printf("  ")

for(i=0i<ni++)

{

  if(i+1>9)

   printf("%d ",i+1)

  else

   printf(" %d",i+1)

}

printf("\n")

for(i=0i<mi++){

  if(i+1>9)

   printf("%d",i+1)

  else

   printf(" %d",i+1)

        for(j=0j<nj++)

        {

            if(maze[i][j]==0||maze[i][j]==9||maze[i][j]==-1)

            {

                printf("a ")

            }

   else if(maze[i][j]==1)

            {

                printf("b ")

            }else

            if(maze[i][j]==2)

   {

    printf("D ")

   }else if(maze[i][j]==3)

   {

    printf("X ")

   }else if(maze[i][j]==4)

   {

    printf("A ")

   }else if(maze[i][j]==5)

   {

    printf("W ")

   }

        }

        printf("\n")

    }

}

/*

*对迷宫进行路径搜索

*数组的数字有以下含义

*0.该点没有被探索过,且可行

*1.该点不可行

*2.该点是可行的,且进行了向东的探索

*3.该点是可行的,且进行了向南的探索

*4.该点是可行的,且进行了向西的探索

*5.该点是可行的,且进行了向北的探索

*6.该点是入口

*9.该点是出口

*-1.该点已经遍历完毕四个方向,不能找到有效的路径,则置为-1

*/

void FindPath()

{

int curx=0,cury=0

int count=0

int flag=0

Node *Stacks=NULL

InitStack(Stacks)

do{

  if(maze[curx][cury]==9)

  {

   flag=1

  }

  switch(pass(curx,cury)){

  case 2:

   maze[curx][cury]=2

   push(Stacks,curx,cury)

   cury++

   break

  case 3:

   maze[curx][cury]=3

   push(Stacks,curx,cury)

   curx++

   break

  case 4:

   maze[curx][cury]=4

   push(Stacks,curx,cury)

   cury--

   break

  case 5:

   maze[curx][cury]=5

   push(Stacks,curx,cury)

   curx--

   break

  case -1:

   maze[curx][cury]=-1

   if(!isEmpty(Stacks))

    pop(Stacks,&curx,&cury)

   break

  }

  count++

}while(!isEmpty(Stacks)&&flag==0)

if(flag==1)

{

  printf("该迷宫的行走路径如下:\n")

  printMaze()

}else

{

  printf("\nSorry,该迷宫无解\n")

}

}

/*

*主函数

*要求输入m,n的值,要符合要求

*程序打印出生成的迷宫,然后进行寻找路径

*如果可以找到出口,则画出该路径

*如果该迷宫没有出口,则提示迷宫无解

*/

int main()

{

/*printf("请输入迷宫的行数m(大于0,小于100):")

scanf("%d",&m)

printf("请输入迷宫的列数n(大于0,小于100):")

scanf("%d",&n)

if(m<0||m>100||n<0||n>100){

  printf("输入数据错误,程序退出\n")

  exit(-1)

}*/

    InitMaze()

    printf("原迷宫为:\n")

printMaze()

FindPath()

getch()

return 0

}

1977年,美国电气与电子工程师协会举办了机器小老鼠走迷宫竞赛。迷宫由许多围墙构成走道,有不少死胡同。小老鼠从进口向里走,开始找路。它身上带有传感器,能感觉出是否碰上围墙。它是由电动机驱动身子下的轮子进行移动的,它身上有微电脑,由电脑计算出最短的路径。电动机和传感器向电脑提供行走了多少前首路程,电脑铅迅根据槐悔此这些数据和程序产生控制信号,控制轮子前进和转弯,使小老鼠以最快速度走到终点。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12283722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存