c语言程序设计 迷宫问题

2024-11-06 23:32:50
推荐回答(3个)
回答(1):

海龟作图行不。这是我大一时的C语言课程设计,我自已做的。
高级级语言课程设计实验报告

实验课程:课程设计 年级:2004级 实验成绩:
课程设计名称 海龟作图 姓名:
任课教师: 学号:2004810025 实验日期:
一、目的
通过编一些小程序,巩固和利用所学的知识,加强变成能力。
本课题涉及的知识内容:for循环嵌套,if语句,二维数组,文件创建与保存,自定义函数等高级语言内容。
二、内容与设计思想
1. 设计内容
海龟爬行过程中,笔朝下纪录海龟爬行踪迹,笔朝上则不纪录并保存踪迹,
1表示笔朝上,2表示朝下,3右转弯,4左转弯,5,x向前走x格,6打印
9结束
2. 主要代码结构
main()函数调用了两个函数
3. 主要代码段分析。
譬如print函数,打印海龟踪迹并保存。Step函数当笔朝上时海龟走过的数组值加一
三、使用环境
本次上机实践所使用的平台和相关软件。
平台:Windows 2000
相关软件:VC++

四、调试过程
1. 测试结果分析
经检验,运行结果正确
五、总结
1. 设计中遇到的问题及解决过程
调试过程中出现一些逻辑和语法错误,但是语法错误容易纠正,而
逻辑错误则比较难纠正。有时会漏掉“,”,“;”,“}”等符号
2. 设计体会和收获。
发现自己也能解决有点复杂的问题
六、附录
1. 源代码
/*海龟作图,活动区域50*50,超出区域,海龟死亡游戏完*/
#include
void print(int [][49]);
void move(int [][49],int,int,int);
main()
{
int step[49][49];
int a,gostep,direct=1,record=1,i,j;
for(i=0;i<=49;i++)
for(j=0;j<=49;j++)
step[i][j]=0;
while(1)
{
scanf("%d,%d",&a,&gostep);
if(a==2) record=1;
if(a==1) record=0;
if(a==4)
{
direct++;
if(direct==5) direct=1;
continue;
}
if(a==3)
{
direct--;
if(direct==0) direct=4;
continue;
}
if(a==5)
{
move(step,gostep,direct,record);
continue;
}
if(a==6)
print(step);
if(a==9)
return 0;
}
}
/*打印海龟踪迹并保存*/
void print(int s[][49])
{
int i,j;
FILE *fp;
fp=fopen("D:\\step.txt","w");
for(i=0;i<=49;i++)
{
for(j=0;j<=49;j++)
{
printf(s[i][j]==0? " ":"*");
fprintf(fp,s[i][j]==0? " ":"*");
}
printf("\n");
}
fclose(fp);
}
void move(int t[][49],int i,int j,int k)
{
static int x=0,y=0;
int xmove,ymove,num;
if(j==1)
{
xmove=1;ymove=0;}
if(j==2)
{
xmove=0;ymove=-1;
}
if(j==3)
{
xmove=-1;ymove=0;
}
if(j==4)
{
xmove=0;ymove=1;
}
for(num=0;num {
t[0][0]=1;
x+=xmove;
y+=ymove;
if(x<0||x>49||y<0||y>49)
{
printf("the place is danger ,you are died");
exit();
}
t[y][x]+=k;
}
}

回答(2):

#include
#include
#include

struct stack
{
int v;
int i;
int j;
}s[1024];

void getmaze(int,int);
int takelmaze(int,int);
void push(int,int,int);
void output(int,int);

int maze[1024][1024];
bool mark[1024][1024];
int top;

int main()
{
int n,m;
printf("请输入迷宫的大小?(n,m)\n");
scanf("%d%d",&n,&m);

getmaze(n,m);

if(takelmaze(n,m))
output(n,m);

printf("输入回车离开程序。");

fflush(stdin);
while(getchar()!='\n');

return 0;
}

int takelmaze(int n,int m)
{
int v;
int g,h;
int move[9][2]={{0,0},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};

v=1;
g=1;
h=1;
top=0;
memset(mark,0,sizeof(mark));
mark[1][1]=1;

do{
g=move[v][0]+g;
h=move[v][1]+h;
if(g==n&&h==m&&maze[n][m]==0)
return 1;
if((maze[g][h]==0)&&(mark[g][h]==0))
{
mark[g][h]=1;
push(g,h,v);
v=1;
}
else if(v<8)
{
g=-move[v][0]+g;
h=-move[v][1]+h;
v++;
}
else
{
if(top>0)
{
g=s[--top].i;
h=s[--top].j;
v=s[--top].v;
v++;
}
}

}while((top>=0)&&(v!=8));

printf("此迷宫无解\n");
return 0;
}

void getmaze(int n,int m)
{
int a,b;

for(a=0;a<=n+1;a++)
{
maze[a][0]=1;
maze[a][m+1]=1;
}
for(b=0;b<=m+1;b++)
{
maze[0][b]=1;
maze[n+1][b]=1;
}
for(a=1;a<=n;a++)
{
for(b=1;b<=m;b++)
scanf("%d",&maze[a][b]);
}
return;
}

void push(int i,int j,int v)
{
s[top].i=i;
s[top].j=j;
s[top].v=v;

top++;

return;
}

void output(int n,int m)
{
int i=0;

printf("(1,1)->");

while(i printf("(%d,%d)-〉",s[i].i,s[i++].j);
printf("(%d,%d)",n,m);
return;
}

回答(3):

你把你QQ留下,我给你发,或者邮箱。因为这个比较长点。还有图形链接时的文件是。obj的。在这里发不成。