成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語言迷宮地圖函數(shù) c語言迷宮問題求解

c語言程序設計的迷宮

這個可行的

我們提供的服務有:成都做網(wǎng)站、成都網(wǎng)站建設、成都外貿網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、永城ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的永城網(wǎng)站制作公司

/*4.3.3源程序*/

#include graphics.h

#include stdlib.h

#include stdio.h

#include conio.h

#include dos.h

#define N 20/*迷宮的大小,可改變*/

int oldmap[N][N];/*遞歸用的數(shù)組,用全局變量節(jié)約時間*/

int yes=0;/*yes是判斷是否找到路的標志,1找到,0沒找到*/

int way[100][2],wayn=0;/*way數(shù)組是顯示路線用的,wayn是統(tǒng)計走了幾個格子*/

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]);/*為了8個方向的遞歸,把舊迷宮圖拷貝給新數(shù)組*/

int FindWay(int (*x)[N],int i,int j);/*自動探索函數(shù)*/

void MapRand(int (*x)[N]);/*隨機生成迷宮函數(shù)*/

void PrMap(int (*x)[N]);/*輸出迷宮圖函數(shù)*/

void Result(void);/*輸出結果處虧衡尺理*/

void Find(void);/*成功處理*/

void NotFind(void);/*失敗處理*/

void main(void)/*主函數(shù)*/

{

int map[N][N]; /*迷宮數(shù)組*/

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);/*系統(tǒng)自動從下標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)/*判斷x,y的變化,8個方向的變化*/

{

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");/*以上是畫8個方向的控制介紹*/

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-2y==N-2)/*人工控制找成功的話*/

yes=1; /*如果成功標志為1*/

}

void WayCopy(int (*oldmap)[N],int (*map)[N])/*拷貝迷宮數(shù)組 */

{

int i,j;

for(i=0;iN;i++)

for(j=0;jN;j++)

oldmap[i][j]=map[i][j];

}

int FindWay(int (*map)[N],int i,int j)/*遞歸找路*/

{

if(i==N-2j==N-2)/*走到出口*/

{

yes=1;/*標志為1,表示成功*/

return;

}

map[i][j]=1;/*走過的地方變?yōu)?*/

WayCopy(oldmap,map); /*拷貝迷宮圖*/

if(oldmap[i+1][j+1]==0!yes)/*判斷右下方是否可走*/

{

FindWay(oldmap,i+1,j+1);

if(yes)/*如果到達出口了,再把值賦給顯示路線的way數(shù)組,也正是這個原因,所以具體路線是從最后開始保存*/

{

way[wayn][0]=i;

way[wayn++][1]=j;

return;

}

}

WayCopy(oldmap,map);

if(oldmap[i+1][j]==0!yes)/*判斷下方是否可以走,如果標志yes已經是1也不用找下去了*/

{

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(); /*隨機數(shù)發(fā)生器*/

for(i=0;iN;i++)

{

for(j=0;jN;j++)

{

if(i==0||i==N-1||j==0||j==N-1)/*最外面一圈為墻壁*/

map[i][j]=1;

else

if(i==1j==1||i==N-2j==N-2)/*出發(fā)點與終點表示為可走的*/

map[i][j]=0;

else

map[i][j]=random(2);/*其它的隨機生成0或1*/

}

}

}

void PrMap(int (*map)[N])/*輸出迷宮圖*/

{

int i,j;

for(i=0;iN;i++)

for(j=0;jN;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();

}

關于C語言編寫一個迷宮

#includestdio.h

#includestdlib.h

#define M 15

#define N 15

struct mark //定義迷宮內點的坐標類型

{

int x;

int y;

};

struct Element //"戀"棧元素,嘿嘿。。

{

int x,y; //x行,y列

int d; //d下一步的方向

};

typedef struct LStack //鏈棧

{

Element elem;

struct LStack *next;

}*PLStack;

/*************棧函數(shù)****************/

int InitStack(PLStack S)//構造空棧

{

S=NULL;

return 1;

}

int StackEmpty(PLStack S)//判斷棧是否為空

{

if(S==NULL)

return 1;

else

return 0;

}

int Push(PLStack S, Element e)//壓入新數(shù)據(jù)元素

{

PLStack p;

p=(PLStack)malloc(sizeof(LStack));

p-elem=e;

p-next=S;

S=p;

return 1;

}

int Pop(PLStack S,Element e) //棧頂元素出棧

{

PLStack p;

if(!StackEmpty(S))

{

e=S-elem;

p=S;

S=S-next;

free(p);

return 1;

}

else

return 0;

}

/***************求迷宮路徑函數(shù)***********************/

void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2])

{

int i,j,d;int a,b;

Element elem,e;

PLStack S1, S2;

InitStack(S1);

InitStack(S2);

maze[start.x][start.y]=2; //入口點作上標記

elem.x=start.x;

elem.y=start.y;

elem.d=-1; //開始為-1

Push(S1,elem);

while(!StackEmpty(S1)) //棧不為空 有路徑可走

{

Pop(S1,elem);

i=elem.x;

j=elem.y;

d=elem.d+1; //下一個方向

while(d4) //試探東敗陪南西北各個方向

{

a=i+diradd[d][0];

b=j+diradd[d][1];

if(a==end.x b==end.y maze[a][b]==0) //如果到了出口

{

elem.x=i;

elem.y=j;

elem.d=d;

Push(S1,elem);

elem.x=a;

elem.y=b;

elem.d=886; //方向輸出為-1 判斷是否到了出口

Push(S1,elem);

printf("\n0=東 1=南 2=西 3=北 886為則走出迷宮\n\n通路畝掘為:(行坐標,列坐標,方向)\n");

while(S1) //逆置迅枯核序列 并輸出迷宮路徑序列

{

Pop(S1,e);

Push(S2,e);

}

while(S2)

{

Pop(S2,e);

printf("--(%d,%d,%d)",e.x,e.y,e.d);

}

return; //跳出兩層循環(huán),本來用break,但發(fā)現(xiàn)出錯,exit又會結束程序,選用return還是不錯滴

}

if(maze[a][b]==0) //找到可以前進的非出口的點

{

maze[a][b]=2; //標記走過此點

elem.x=i;

elem.y=j;

elem.d=d;

Push(S1,elem); //當前位置入棧

i=a; //下一點轉化為當前點

j=b;

d=-1;

}

d++;

}

}

printf("沒有找到可以走出此迷宮的路徑\n");

}

/*************建立迷宮*******************/

void initmaze(int maze[M][N])

{

int i,j;

int m,n; //迷宮行,列 [/M]

printf("請輸入迷宮的行數(shù) m=");

scanf("%d",m);

printf("請輸入迷宮的列數(shù) n=");

scanf("%d",n);

printf("\n請輸入迷宮的各行各列:\n用空格隔開,0代表路,1代表墻\n",m,n);

for(i=1;i=m;i++)

for(j=1;j=n;j++)

scanf("%d",maze[i][j]);

printf("你建立的迷宮為(最外圈為強)...\n");

for(i=0;i=m+1;i++) //加一圈圍墻

{

maze[i][0]=1;

maze[i][n+1]=1;

}

for(j=0;j=n+1;j++)

{

maze[0][j]=1;

maze[m+1][j]=1;

}

for(i=0;i=m+1;i++) //輸出迷宮

{

for(j=0;j=n+1;j++)

printf("%d ",maze[i][j]);

printf("\n");

}

}

void main()

{

int sto[M][N];

struct mark start,end; //start,end入口和出口的坐標

int add[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//行增量和列增量 方向依次為東西南北 [/M]

initmaze(sto);//建立迷宮

printf("輸入入口的橫坐標,縱坐標[逗號隔開]\n");

scanf("%d,%d",start.x,start.y);

printf("輸入出口的橫坐標,縱坐標[逗號隔開]\n");

scanf("%d,%d",end.x,end.y);

MazePath(start,end,sto,add); //find path

system("PAUSE");

}

如何用C語言編寫一個迷宮程序?

#include \x0d\x0a#include \x0d\x0a#define M 15 \x0d\x0a#define N 15 \x0d\x0astruct mark //定義迷宮內點的坐標類型 \x0d\x0a{ \x0d\x0aint x; \x0d\x0aint y; \x0d\x0a}; \x0d\x0a\x0d\x0astruct Element //"戀"棧元素,嘿嘿。。 \x0d\x0a{ \x0d\x0aint x,y; //x行,y列 \x0d\x0aint d; //d下一步的方向 \x0d\x0a}; \x0d\x0a\x0d\x0atypedef struct LStack //鏈棧 \x0d\x0a{ \x0d\x0aElement elem; \x0d\x0astruct LStack *next; \x0d\x0a}*PLStack; \x0d\x0a\x0d\x0a/*************棧函數(shù)****************/ \x0d\x0a\x0d\x0aint InitStack(PLStack S)//構造空棧 \x0d\x0a{ \x0d\x0aS=NULL; \x0d\x0areturn 1; \x0d\x0a} \x0d\x0a\x0d\x0aint StackEmpty(PLStack S)//判斷棧是否為空 \x0d\x0a{ \x0d\x0aif(S==NULL) \x0d\x0areturn 1; \x0d\x0aelse \x0d\x0areturn 0; \x0d\x0a} \x0d\x0a\x0d\x0aint Push(PLStack S, Element e)//壓入新數(shù)據(jù)元素 \x0d\x0a{ \x0d\x0aPLStack p; \x0d\x0ap=(PLStack)malloc(sizeof(LStack)); \x0d\x0ap-elem=e; \x0d\x0ap-next=S; \x0d\x0aS=p; \x0d\x0areturn 1; \x0d\x0a} \x0d\x0a\x0d\x0aint Pop(PLStack S,Element e) //棧頂元素出棧 \x0d\x0a{ \x0d\x0aPLStack p; \x0d\x0aif(!StackEmpty(S)) \x0d\x0a{ \x0d\x0ae=S-elem; \x0d\x0ap=S; \x0d\x0aS=S-next; \x0d\x0afree(p); \x0d\x0areturn 1; \x0d\x0a} \x0d\x0aelse \x0d\x0areturn 0; \x0d\x0a} \x0d\x0a\x0d\x0a/***************求迷宮路徑鋒雹函數(shù)***********************/ \x0d\x0avoid MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2]) \x0d\x0a{ \x0d\x0aint i,j,d;int a,b; \x0d\x0aElement elem,e; \x0d\x0aPLStack S1, S2; \x0d\x0aInitStack(S1); \x0d\x0aInitStack(S2); \x0d\x0amaze[start.x][start.y]=2; //入口點作上標記 \x0d\x0aelem.x=start.x; \x0d\x0aelem.y=start.y; \x0d\x0aelem.d=-1; //開始為-1 \x0d\x0aPush(S1,elem); \x0d\x0awhile(!StackEmpty(S1)) //棧不為空 有路徑可走 \x0d\x0a{ \x0d\x0aPop(S1,elem); \x0d\x0ai=elem.x; \x0d\x0aj=elem.y; \x0d\x0ad=elem.d+1; //下一個方向 \x0d\x0awhile(d(%d,%d,%d)",e.x,e.y,e.d); \x0d\x0a} \x0d\x0areturn; //跳出兩層循環(huán),本來乎基衫用break,但發(fā)現(xiàn)出錯,exit又會歲腔結束程序,選用return還是不錯滴\x0d\x0a} \x0d\x0aif(maze[a][b]==0) //找到可以前進的非出口的點 \x0d\x0a{ \x0d\x0amaze[a][b]=2; //標記走過此點 \x0d\x0aelem.x=i; \x0d\x0aelem.y=j; \x0d\x0aelem.d=d; \x0d\x0aPush(S1,elem); //當前位置入棧 \x0d\x0ai=a; //下一點轉化為當前點 \x0d\x0aj=b; \x0d\x0ad=-1; \x0d\x0a} \x0d\x0ad++; \x0d\x0a} \x0d\x0a} \x0d\x0aprintf("沒有找到可以走出此迷宮的路徑\n"); \x0d\x0a} \x0d\x0a\x0d\x0a/*************建立迷宮*******************/ \x0d\x0avoid initmaze(int maze[M][N]) \x0d\x0a{ \x0d\x0aint i,j; \x0d\x0aint m,n; //迷宮行,列 [/M] \x0d\x0a\x0d\x0aprintf("請輸入迷宮的行數(shù) m="); \x0d\x0ascanf("%d",m); \x0d\x0aprintf("請輸入迷宮的列數(shù) n="); \x0d\x0ascanf("%d",n); \x0d\x0aprintf("\n請輸入迷宮的各行各列:\n用空格隔開,0代表路,1代表墻\n",m,n); \x0d\x0afor(i=1;i

回答于?2022-11-16

新聞標題:c語言迷宮地圖函數(shù) c語言迷宮問題求解
URL鏈接:http://jinyejixie.com/article4/ddpieoe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、企業(yè)建站、Google網(wǎng)站內鏈、網(wǎng)站建設、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設
贵港市| 莒南县| 拜城县| 永城市| 华宁县| 会同县| 和硕县| 永胜县| 东方市| 盐边县| 新安县| 张掖市| 沛县| 东兰县| 卢湾区| 宁安市| 阿坝| 淳安县| 天峨县| 涿州市| 吴忠市| 井冈山市| 家居| 佛冈县| 班玛县| 治多县| 高台县| 吉木萨尔县| 涪陵区| 江津市| 张家界市| 桑日县| 江永县| 泉州市| 天镇县| 宁夏| 游戏| 吉木乃县| 佛坪县| 浦县| 平谷区|