您的位置:

c语言数据墙,语c墙汇总

本文目录一览:

C语言问题怎么给运行窗口弄个像墙一样的东西

你好!!

有两个办法解决这个问题:

1、检测你外框的边界,来确定是不是能移动方块

2、设定你方块能移动的步数,超过步数,就不能移动方块

给你一个推箱子的游戏,你玩玩,参考一下吧

数据结构编程C语言版

void PrintMaze(MazeType maze)

{//将标记路径信息的迷宫输出到终端(包括外墙)

int i,j,n,k;

n = (34 - maze.c)/2;

for(k=0; kn; k++)//让迷宫居中

printf(" ");

printf(" ");

for(i=0;i=maze.c+1;i++)//打印列数名

{

printf("%2d",i);

if(i==9) //对齐

printf(" ");

}

printf("\n");

for(i=0;i=maze.r+1;i++)

{

for(k=0; kn; k++)//让迷宫居中

printf(" ");

printf("%2d",i); //打印行名

for(j=0;j=maze.c+1;j++)

{

switch(maze.adr[i][j])

{

case ' ':

printf(" ");//路

break;

case '#':

printf("■"); //墙

break;

case '*':

printf(". ");//路径

break;

case '@':

printf("◇");//走过两次的地方

break;

case 'e':

printf("E ");//结束位置

break;

case 's':

printf("S ");//开始位置

break;

case '!':

printf("♀");//人

break;

default:

printf("? "); //出错

}

}

printf("\n");

}

}

Status NextPosPlay(MazeType maze, PostType curpos)

{

//指示并返回下一位置的坐标

char c; //接收用户输入的方向

printf("\n请输入'w'(上)、's'(下)、'a'(左)、'd'(右)回到出发点和输入'H/h'可以寻求电脑帮助");

do{

c = getch();

}while(c!='w'c!='s'c!='a'c!='d'c!='h'c!='W'c!='S'c!='A'c!='D'c!='H');

switch(c)

{

case 'd': //右

case 'D':

curpos.c += 1;

break;

case 's': //下

case 'S':

curpos.r += 1;

break;

case 'a': //左

case 'A':

curpos.c -= 1;

break;

case 'w': //上

case 'W':

curpos.r -= 1;

break;

case 'h': //推出,让电脑帮助

case 'H':

return FALSE;

}

return OK;

}

Status PlayMazePath(MazeType maze, PostType start, PostType end)

{

PostType curpos, w; //curpos为当前步,w为上一步;

SElemType e; //堆栈存储类型

curpos = start; //设置"当前位置"为"入口位置"

Stack S; //存储走过的最简路径

InitStack(S);

do

{

if(Pass(maze, curpos)) //如果可以通过

{

maze.adr[curpos.r][curpos.c] = '!'; //'!'表示人,设置当前步为人,方便动态显示

system("cls"); //清屏

PrintMaze(maze); //动态输出迷宫路径

maze.adr[curpos.r][curpos.c] = ' '; //还原

w = curpos;

e.seat = curpos;

Push(S, e);

DeleteSameElem(S); //删除重复的步子

if(!NextPosPlay(maze, curpos)) //接收下一步

{

return FALSE; //退出 让电脑帮助

}

}

else

{

curpos = w; //退回到上一步

if(!NextPosPlay(maze, curpos)) //接收下一步

{

return FALSE; //退出 让电脑帮助

}

}

if(curpos.r == start.r curpos.c == start.c) //若当前为出口则让电脑帮助

{

return FALSE; //退出

}

}while(curpos.r != end.r || curpos.c != end.c);//当前位置为结束位置时推出循环

maze.adr[curpos.r][curpos.c] = '!'; //设置当前步为人,方便动态显示

system("cls");

while(!StackEmpty(S)) //把存储的步子放入数组

{

Pop(S,e);

maze.adr[e.seat.r][e.seat.c] = '*'; //设置路径, ‘*’表示路径

}

PrintMaze(maze); //输出带有路径的迷宫

printf("\n\t\t这是你走过的最短路径");

return OK;

}

void PlayMaze()

{

MazeType maze;

char c; //接收用户输入的选择

PostType start, end; //开始和结束点

int n, flag=1,m; //n表示系统迷宫和随机迷宫 m表示难度

system("cls");

printf("\n\n\n ┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴\n");

printf(" ┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬\n");

printf(" ┬┴┬ 1:使用系统默认迷宫 ┬┴┬\n");

printf(" ┴┬┴ 2:使用随机产生迷宫 ┴┬┴\n");

printf(" ┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬\n");

printf(" ┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴\n\n");

printf("请选择:");

do{

scanf("%d", n);

}while(n!=1 n!=2); //选择系统迷宫或随机迷宫

if(n == 2) //选择随机迷宫

{

RandomInitMaze(maze); //调用随机产生迷宫的函数

system("cls");

PrintMaze(maze);

InputBeginEnd(maze, start, end); //输入开始和结束点

}

else //选择自带的迷宫

{

m = SetMaze(maze); //调用设置自带迷宫的函数

if(m == 1) //初级

{

start.r = 1; start.c = 1;

end.r = 9; end.c = 10;

}

else if(m == 2) //中级

{

start.r = 1; start.c = 1;

end.r = 15; end.c = 15;

}

else if(m == 3) //高级

{

start.r = 1; start.c = 1;

end.r = 20; end.c = 26;

}

maze.adr[start.r][start.c] = 's';

maze.adr[end.r][end.c] = 'e'; //把开始结束点显示给用户

PrintMaze(maze);

printf("\n\t'S'表示出发点,'E'表示终止点");

printf("\n\t请按任意键");

getch();

}

while(flag){

if(!PlayMazePath(maze, start, end))//迷宫求解

{

printf("\n请问你需要电脑帮你吗?(y/n):\n");

do{

c = getchar();

}while(c != 'y' c != 'Y' c != 'n' c != 'N'); //接收用户是否需要电脑帮助

if(c == 'y' || c == 'Y') //需要帮助

{

if(!MazePath(maze, start, end)) //电脑计算

printf("\n\t\t没有路径!\n");

flag = 0;

}

else //不需要帮助 自己继续找路径

{

flag = 1;

}

}

else //找到路径

{

printf("\n\t\t\tGood!你找到了路径!\n");

flag = 0;

}

}

}

c语言的数据类型包括哪些

C语言的数据类型包括:基本类型、构造类型、指针类型、空类型。

其中构造类型中包括共用体、数组、结构体三种类型。基本类型中还包括整型、浮点型、字符型和枚举型四种类型。

1、基本类型,也就是C语言中的基础类型,其中包括整数类型、字符型、浮点型、枚举类型。

2、构造类型,就是使用基本类型的数据,或者使用已经构造好的数据类型,进行添加、设计构造出新的数据类型,使其设计的新构造类型满足待解决问题所需要的数据类型。它并不像基本类型那样简单,而是由多种类型组合而成的新类型,其中每一组成部分称为构造类型的成员。

构造类型也包括三种形式:数组类型、结构体类型和共用体类型。

3、指针类型,C语言的精华是指针,指针类型不同于其他类型的特殊性在于:指针的值表示的是某个内存地址。

4、空类型,关键字是void,其主要作用在于:对函数返回的限定;对函数参数的限定。也就是说,一般一个函数都具有一个返回值,将其值返回调用者,这个返回值是具有特定的类型,但是当函数不必返回一个值时,就可以使用空类型设定返回值的类型。

c语言

C语言是一门面向过程、抽象化的通用程序设计语言,主要用于底层开发。以简易的方式编译,并处理低级存储器。C语言支持跨平台操作,一个标准的C语言程序可以在许多计算机平台上进行编译。

数据结构算法(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;

/*************栈函数****************/

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)//压入新数据元素

{

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;

}

/***************求迷宫路径函数***********************/

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; //跳出两层循环,本来用break,但发现出错,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("请输入迷宫的行数 m=");

scanf("%d",m);

printf("请输入迷宫的列数 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");

}

测试数据,算法复杂度你就自己来写吧,如果你连这都不自己做,那你一定是在应付作业。劝你还是自己运行测试一下吧,免得答辩时老师问你,什么都不知道,那你就悲剧了。祝你好运!!

wall 2在c语言中是什么意思

wall2在c语言中是墙2的意思。

w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。在编译一些项目的时候可以-W和-Wall选项一起使用。

C语言数据结构 老鼠走迷宫问题

/* 迷宫矩阵

1 1 1 1 1 1 1 1 1 1

1 0 0 0 0 1 0 0 0 1

1 1 1 0 0 1 0 1 0 1

1 0 0 0 1 0 0 0 0 1

1 0 0 0 0 1 0 1 0 1

1 1 0 1 0 0 0 0 0 1

1 0 0 1 1 1 0 1 1 1

1 1 0 0 0 1 0 0 0 1

1 1 1 1 1 1 1 1 1 1

*/

#includestdio.h

#define m 7

#define n 8

void path()

{

int maze[m+2][n+2] ;

int move[4][2]={ {0,-1},{-1,0},{0,1},{1,0} };

int s[54][3];

int top=0;

int i,j,k,f=0;

int g,h,p;

for(i=0;im+2;++i)

for(j=0;jn+2;++j)

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

maze[1][1]=2;

s[top][0]=1;

s[top][1]=1;

s[top][2]=0;

++top;

while(top!=0f==0)

{

--top;

i=s[top][0];

j=s[top][1];

k=s[top][2];

while(k4)

{

g=i+move[k][0];

h=j+move[k][1];

if(g==mh==nmaze[g][h]==0)

{

for(p=0;ptop;++p)

printf("%3d,%d\n",s[p][0],s[p][1]);

printf("%3d,%d\n",i,j);

printf("%3d,%d\n",m,n);

f=1;

}//if

if(maze[g][h]==0)

{

maze[g][h]=2;

s[top][0]=i;

s[top][1]=j;

s[top][2]=k;

++top;

i=g;

j=h;

k=0;

}//if

k=k+1;

}//while

}//while

if(f==0)

printf("no path\n");

}//pathvoid main()

{

path();

}