本文目錄一覽:
- 1、C語言問題怎麼給運行窗口弄個像牆一樣的東西
- 2、數據結構編程C語言版
- 3、c語言的數據類型包括哪些
- 4、數據結構演算法(c語言) 迷宮求解
- 5、wall 2在c語言中是什麼意思
- 6、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();
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/312714.html