c语言的迷宫问题

c语言的迷宫问题,第1张

//寻路_带权重_带障碍_最短_文件地图_不闪------wlfryq------//

#include <stdioh>

#include <stdlibh>

#include <stringh>

#include <windowsh>

typedef struct

{

int x;

int y;

} _PT;

_PT pt;

int row=0,col=0;

//设置CMD窗口光标位置

void setxy(int x, int y)

{

   COORD coord = {x, y};

   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

//获取当前CMD当前光标所在位置

void getxy()

{

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD coordScreen = {0, 0}; //光标位置

    CONSOLE_SCREEN_BUFFER_INFO csbi;

    if (GetConsoleScreenBufferInfo(hConsole, &csbi))

    {

     ptx=csbidwCursorPositionX;

     pty=csbidwCursorPositionY;

    }

}

typedef struct

{

int x;

int y;

int type;

int v;

}PT;

PT s=NULL,stack[50],start,end,c;

int pos=0;

void prt()

{

int i,j;

system("cls");

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(s[i][j]type==1)

{

printf("■");

}

else if(i==endx && j==endy)

{

printf("★");

}

else if(i==cx && j==cy)

{

printf("◎");

}

else

{

printf("  ");

}

}

printf("\n");

}

Sleep(500);

}

void stack_in(PT a)

{

stack[pos++]=a;

}

PT stack_out()

{

int i;

PT t;

t=stack[0];

for(i=0;i<pos-1;i++)

{

stack[i]=stack[i+1];

}

pos--;

return t;

}

void fun()

{

PT a;

int x,y,v;

while(1)

{

if(pos==0)

{

break;

}

a=stack_out();

x=ax;

y=ay;

if(x==startx && y==starty)

{

break;

}

v=s[x][y]v;

if(x-1>=0 && s[x-1][y]type==0 && (s[x-1][y]v==-1 || s[x-1][y]v>v+1))

{

s[x-1][y]v=v+1;

stack_in(s[x-1][y]);

}

if(x+1<=row-1 && s[x+1][y]type==0 && (s[x+1][y]v==-1 || s[x-1][y]v>v+1))

{

s[x+1][y]v=v+1;

stack_in(s[x+1][y]);

}

if(y-1>=0 && s[x][y-1]type==0 && (s[x][y-1]v==-1 || s[x-1][y]v>v+1))

{

s[x][y-1]v=v+1;

stack_in(s[x][y-1]);

}

if(y+1<=col-1 && s[x][y+1]type==0 && (s[x][y+1]v==-1 || s[x-1][y]v>v+1))

{

s[x][y+1]v=v+1;

stack_in(s[x][y+1]);

}

}

}

void go(int x, int y)

{

printf("\n按任意键开始\n");

getchar();

int v;

while(1)

{

if(x==endx && y==endy)

{

setxy(0,y+2);

printf("end");

return;

}

v=s[x][y]v;

if(v==0)

{

return;

}

if(x-1>=0 && s[x-1][y]v==v-1)

{

c=s[x-1][y];

setxy(y2,x);

x=x-1;

printf("  ");

setxy(y2,x);

printf("◎");

Sleep(500);

continue;

}

else if(x+1<=row-1 && s[x+1][y]v==v-1)

{

c=s[x+1][y];

setxy(y2,x);

x++;

printf("  ");

setxy(y2,x);

printf("◎");

Sleep(500);

continue;

}

else if(y-1>=0 && s[x][y-1]v==v-1)

{

c=s[x][y-1];

setxy(y2,x);

y--;

printf("  ");

setxy(y2,x);

printf("◎");

Sleep(500);

continue;

}

else if(y+1<=col-1 && s[x][y+1]v==v-1)

{

c=s[x][y+1];

setxy(y2,x);

y++;

printf("  ");

setxy(y2,x);

printf("◎");

Sleep(500);

continue;

}

}

printf("\nreturn go\n");

system("pause");

}

void GetMapFromFile()

{

int i,j,x,y,len;

char ch[50]={'\0'};

FILE fp=fopen("e:\\map1txt","r");

if(fp==NULL)

{

printf("open file failed\n");

return;

}

x=0;

while(!feof(fp))

{

fgets(ch,50,fp);

row++;

}

col=strlen(ch);

fseek(fp,0L,SEEK_SET);

while(!feof(fp))

{

fgets(ch,50,fp);

if(s==NULL)

{

len=strlen(ch);

for(i=len-1;i>0;i--)

{

if(ch[i]!='0' && ch[i]!='1')

{

ch[i]='\0';

}

else

{

break;

}

}

len=strlen(ch);

s=(PT)malloc(sizeof(PT)row);

for(j=0;j<len;j++)

{

(s+j)=(PT)malloc(sizeof(PT)len);

}

}

y=0;

for(i=0;i<len;i++)

{

s[x][y]type=ch[i]-48;

s[x][y]x=x;

s[x][y]y=y;

s[x][y]v=-1;

y++;

}

x++;

}

start=s[row-2][1];

end=s[row-2][len-2];

fclose(fp);

}

int main()

{

GetMapFromFile();

int i,j;

int x,y;

x=endx;

y=endy;

s[x][y]v=0;

stack_in(end);

fun();

c=start;

prt();

go(startx,starty);

return 0;

}

ret_val=fgets(st,n,stdin); 从标准输入设备读入一行字符,含换行符。若拍入字符个数多于需要,则 st[] 最后一个字符 为 '\0'

---

若拍入字符个数多于需要,才会 进入

while(getchar()!='\n') continue;

这句中的 continue 有或没有是 一样 的, 也就是说用:

while(getchar()!='\n') ; 是一样的。

这句的作用 相当于 清掉 拍入的多余的字符,直到遇到 换行符。

例如: n=5;

拍入 12345678换行。

fgets 读入 1234 到st[], st[4]='\0'

getchar() 依次读去 5 6 7 8 换行 -- 循环了5次。

你的问题 大概 指 这件事。 continue 从st[] 尾开始。

以上就是关于c语言的迷宫问题全部的内容,包括:c语言的迷宫问题、请帮忙解读下C语言下面代码中continue 的光标在哪儿 是在输入的第一个字符 还是st[i]、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/10127539.html

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

发表评论

登录后才能评论

评论列表(0条)

保存