永发信息网

c语言编写迷宫的问题 c语言

答案:1  悬赏:0  手机版
解决时间 2021-02-04 22:32
c语言编写迷宫的问题 c语言
最佳答案

#include
#include
#include
#include
#include
#define N 20
int oldmap[N][N];
int yes=0;
int way[100][2],wayn=0;
void Init(void);
void Close(void);
void DrawPeople(int *x,int *y,int n);
void PeopleFind(int (*x)[N]);
void WayCopy(int (*x)[N],int (*y)[N]);
int FindWay(int (*x)[N],int i,int j);
void MapRand(int (*x)[N]);
void PrMap(int (*x)[N]);
void Result(void);
void Find(void);
void NotFind(void);
void main(void)
{
int map[N][N];
char ch;
clrscr();
printf("\n Please select hand(1) else auto\n");
scanf("%c",&ch);
Init();
MapRand(map);
PrMap(map);
if(ch=='1')
PeopleFind(map);
else
FindWay(map,1,1);
Result();
Close();
}
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void DrawPeople(int *x,int *y,int n)
{
setfillstyle(SOLID_FILL,WHITE);
bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);

switch(n)
{
case 1: (*x)--;break;
case 2: (*x)--;(*y)++;break ;
case 3: (*y)++;break;
case 4: (*x)++;(*y)++;break;
case 5: (*x)++;break;
case 6: (*x)++;(*y)--;break;
case 7: (*y)--;break;
case 8: (*x)--;(*y)--;break;
}
setfillstyle(SOLID_FILL,RED);
bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);
}
void PeopleFind(int (*map)[N])
{
int x,y;
char c=0;
x=y=1;
setcolor(11);
line(500,200,550,200);
outtextxy(570,197,"d");
line(500,200,450,200);
outtextxy(430,197,"a");
line(500,200,500,150);
outtextxy(497,130,"w");
line(500,200,500,250);
outtextxy(497,270,"x");
line(500,200,450,150);
outtextxy(445,130,"q");
line(500,200,550,150);
outtextxy(550,130,"e");
line(500,200,450,250);
outtextxy(445,270,"z");
line(500,200,550,250);
outtextxy(550,270,"c");
setcolor(YELLOW);
outtextxy(420,290,"Press 'Enter' to end");
setfillstyle(SOLID_FILL,RED);
bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);
while(c!=13)
{
c=getch();
if(c=='w'&&map[x-1][y]!=1)
DrawPeople(&x,&y,1);
else
if(c=='e'&&map[x-1][y+1]!=1)
DrawPeople(&x,&y,2);
else
if(c=='d'&&map[x][y+1]!=1)
DrawPeople(&x,&y,3);
else
if(c=='c'&&map[x+1][y+1]!=1)
DrawPeople(&x,&y,4);
else
if(c=='x'&&map[x+1][y]!=1)
DrawPeople(&x,&y,5);
else
if(c=='z'&&map[x+1][y-1]!=1)
DrawPeople(&x,&y,6);
else
if(c=='a'&&map[x][y-1]!=1)
DrawPeople(&x,&y,7);
else if(c=='q'&&map[x-1][y-1]!=1)
DrawPeople(&x,&y,8);
}
setfillstyle(SOLID_FILL,WHITE);
bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);
if(x==N-2&&y==N-2)
yes=1;
}
void WayCopy(int (*oldmap)[N],int (*map)[N])
{
int i,j;
for(i=0;i for(j=0;j oldmap[i][j]=map[i][j];
}
int FindWay(int (*map)[N],int i,int j)
{
if(i==N-2&&j==N-2)
{
yes=1;
return;
}
map[i][j]=1;
WayCopy(oldmap,map);
if(oldmap[i+1][j+1]==0&&!yes)
{
FindWay(oldmap,i+1,j+1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i+1][j]==0&&!yes)
{
FindWay(oldmap,i+1,j);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i][j+1]==0&&!yes)
{
FindWay(oldmap,i,j+1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i-1][j]==0&&!yes)
{
FindWay(oldmap,i-1,j);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i-1][j+1]==0&&!yes)
{
FindWay(oldmap,i-1,j+1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i+1][j-1]==0&&!yes)
{
FindWay(oldmap,i+1,j-1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i][j-1]==0&&!yes)
{
FindWay(oldmap,i,j-1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
WayCopy(oldmap,map);
if(oldmap[i-1][j-1]==0&&!yes)
{
FindWay(oldmap,i-1,j-1);
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
return;
}
void MapRand(int (*map)[N])
{
int i,j;
cleardevice();
randomize();
for(i=0;i {
for(j=0;j {
if(i==0||i==N-1||j==0||j==N-1)
map[i][j]=1;
else
if(i==1&&j==1||i==N-2&&j==N-2)
map[i][j]=0;
else
map[i][j]=random(2);
}
}
}
void PrMap(int (*map)[N])
{
int i,j;
for(i=0;i for(j=0;j if(map[i][j]==0)
{
setfillstyle(SOLID_FILL,WHITE);
bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);
}
else
{
setfillstyle(SOLID_FILL,BLUE);
bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);
}
}
void Find(void)
{
int i;
setfillstyle(SOLID_FILL,RED);
wayn--;
for(i=wayn;i>=0;i--)
{
bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+
way[i][1]*15+6,50+way[i][0]*15+6);
sleep(1);
}
bar(100+(N-2)*15-6,50+(N-2)*15-6,100+
(N-2)*15+6,50+(N-2)*15+6);
setcolor(GREEN);
settextstyle(0,0,2);
outtextxy(130,400,"Find a way!");
}
void NotFind(void)
{
setcolor(GREEN);
settextstyle(0,0,2);
outtextxy(130,400,"Not find a way!");
}
void Result(void)
{
if(yes)
Find();
else
NotFind();
getch();
}
void Close(void)
{
closegraph();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
花洋言华情丝形象店我想知道这个在什么地方
浪投的意思是什么啊?知道的请说下!
姓马的牛人名人多么
双塔出口(双塔互通式立交桥出口南向)在哪里啊
立马造桥的意思是什么啊?知道的请说下!
有熟悉证券行业的么
道生·一碗水酒类链式服务机构地址有知道的么
有没有什么东西可以插手机卡做wifi热点?手机
电信天翼后付费卡可以用充值卡充值吗?
违滞的意思是什么啊?知道的请说下!
青云志小说
宏伟名都这个地址在什么地方,我要处理点事
歇台的意思是什么啊?知道的请说下!
桦南县城市社区管委会地址有知道的么?有点事
家里用智能马桶好,还是手动冲水的好?
推荐资讯
西安市北城驾校报名处怎么去啊,有知道地址的
用茶水洗头可以吗,有啥好处
怎样才能了解一个男生的想法?
靖边县法律援助中心地址在哪,我要去那里办事
西施兔的饲养
和泰针织有限公司我想知道这个在什么地方
远诚图文怎么去啊,我要去那办事
332304,6位qq号,皇冠靓号,会员VIP7.红钻黄
旺锅特色火锅这个地址在什么地方,我要处理点
“秦王扫六合,虎视何雄哉!”诗中所赞颂的秦
鸿业超市(章丘市平陵粮食管理所西北)怎么去啊
《不知疲倦的人》的第一二三部分是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?