引用 | 编辑
唐老鸭
2005-03-28 16:32 |
1楼
▲ ▼ |
可以阿...基本上迷宫的意思就是只有些路可以走....有些路不能走嘛....所以你就宣告一个八乘八的阵列....有些设为0...有些设为1....1就代表可以走...0就不行....基本原理就是这样啦....
PS.我说错的话请其他的大大代为说明啰..... x1 |
引用 | 编辑
codeboy
2005-03-28 17:23 |
2楼
▲ ▼ |
下面是引用唐老鸭于2005-03-28 16:32发表的 Re:【求助】c++也能写迷宫吗?><":没错...基本上就是这样写... 然后再加上一些基础判别来向前后左右走~ x0 |
引用 | 编辑
凯西男孩
2005-03-28 17:37 |
3楼
▲ ▼ |
上面的大大,阵列我们是教过,可是我们是教最基本的东西,你们说的那些根本听不懂= =可以请你们在说明详细一点吗?对不起,小弟我笨笨地QQ。谢谢你们喔!
x0 |
引用 | 编辑
唐老鸭
2005-03-28 17:55 |
4楼
▲ ▼ |
下面是引用凯西男孩于2005-03-28 17:37发表的 Re:【求助】c++也能写迷宫吗?><": 就譬如我宣告一个阵列 int[2][2]=({1,1},{0,1}}......[0][0]是起点....[1][1]是终点.....那你就知道一开始往下走不行阿....因为[1][0]等于0...当然往左或上也不行....因为小于阵列的索引值....所以只能往右走阿....就是[0][1].....所以你上下左右的移动....就是移动你阵列的索引值阿....然后取出该值....就知道哪条路可不可以走了....就是这样判断的..... 这样应该很详细了吧 x0 |
引用 | 编辑
夷希微
2005-03-29 02:23 |
8楼
▲ ▼ |
呵呵~怎么可以说老师要整死你们呢~这个程式并不难的呀 ^^
小妹来鸡婆一下,帮您画迷宫,不过走迷宫的程式您要自己写~嘻嘻 ^^y C 的写法如下: 复制程式 #include <stdio.h> void main(void) { int MAP[8][8]={{1,0,1,1,1,1,1,1}, {1,0,1,0,1,0,0,1}, {1,0,1,0,1,0,1,1}, {1,0,1,0,0,0,0,1}, {1,0,0,0,1,1,0,1}, {1,0,1,0,0,1,0,1}, {1,0,1,0,1,1,0,1}, {1,1,1,1,1,1,2,1}}; int x,y; for(x=0;x<8;x++) { for(y=0;y<8;y++) { if(MAP[x][y]==1)printf("■"); else printf(" "); } printf("\n"); } } C++ 的写法如下: 复制程式 #include <iostream.h> void main(void) { int MAP[8][8]={{1,0,1,1,1,1,1,1}, {1,0,1,0,1,0,0,1}, {1,0,1,0,1,0,1,1}, {1,0,1,0,0,0,0,1}, {1,0,0,0,1,1,0,1}, {1,0,1,0,0,1,0,1}, {1,0,1,0,1,1,0,1}, {1,1,1,1,1,1,2,1}}; int x,y; for(x=0;x<8;x++) { for(y=0;y<8;y++) { if(MAP[x][y]==1)cout << "■"; else cout << " "; } cout << endl; } } 加油唷 ^_^ x2 |
引用 | 编辑
凯西男孩
2005-03-29 13:54 |
9楼
▲ ▼ |
哈哈~各位大大都好厉害喔!我有去图书馆借书来看说,可是那个都是C语言的比较多,没想到有小妹妹肯教我= =呜呜~好感动喔!谢谢你们大家喔!感激不尽。
x0 |
引用 | 编辑
凯西男孩
2005-03-29 23:29 |
10楼
▲ ▼ |
阿勒~~我会错意了= =原本以为是画个图出来就好了,可是刚才同学说要让它自已走出迷官,搞笑喔~我们程式也才教基础的东西而以,叫我们写那个,全班当掉><"有大大会写的吗?教导教导一下好吗?= =谢谢
x0 |
引用 | 编辑
凯西男孩
2005-03-29 23:32 |
11楼
▲ ▼ |
呜呜~我会错老师的意思了,原来还要让它自已走完迷宫,我们只教基础的程式而以,而且那节课也不是专门的程式课,叫我们写那个,等于全班当掉= =有大大会走迷宫的吗?教一下吧!谢谢><
x0 |
引用 | 编辑
唐老鸭
2005-03-30 03:03 |
12楼
▲ ▼ |
下面是引用凯西男孩于2005-03-29 23:32发表的 Re:【求助】c++也能写迷宫吗?><": 程式码帮你写好POST在下面了.....后来觉得举例太麻烦....直接帮你写部分的程式好了.... x0 |
引用 | 编辑
凯西男孩
2005-03-30 17:01 |
15楼
▲ ▼ |
这个算是基础= =阿呜~a系狼。问题来了,全班没人会><够搞笑吧!有没有大大肯帮写一下程式码的呀!小弟我实在是力不从心呀!感激不尽唷!
x0 |
引用 | 编辑
唐老鸭
2005-03-30 17:49 |
16楼
▲ ▼ |
14楼大大说的写法我不会....
所以希望那位大大也可以教我说.... 我给你我刚写好的程式码..... 但这不是完整版的..... 里面还要加入一些判断.... 避免重复走的部分..... 若是你的题目有两种以上的走法.... 那就又更麻烦啰..... 那些部分我就留给你写啰..... 我也只会这种写法.... 看不懂在提问题吧..... 复制程式 #include <iostream> using namespace std; #define ROW 3 #define COL 3 struct walk { int vertical; int horizon; } move[4]; //不加入重覆判断 void main() { int maze[ROW][COL]={{1,1,0},{0,1,1},{0,0,2}}; int row=0; int col=0; int dir; int next_row; int next_col; //往上走 move[0].vertical=-1; move[0].horizon=0; //往下走 move[1].vertical=1; move[1].horizon=0; //往左走 move[2].vertical=0; move[2].horizon=-1; //往右走 move[3].vertical=0; move[3].horizon=1; cout<<"(0,0)=>"; while(maze[row][col]!=2) { //随机取一个方向 dir=rand()%4; next_row=row+move[dir].vertical; next_col=col+move[dir].horizon; if((maze[next_row][next_col]!=0)&&((next_row>=0)&&(next_row<ROW))&&((next_col>=0)&&(next_col<COL))) { if(dir==0) cout<<"向上走=>"; else if(dir==1) cout<<"向下走=>"; else if(dir==2) cout<<"向左走=>"; else cout<<"向右走=>"; cout<<"("; cout<<next_row; cout<<","; cout<<next_col; cout<<")=>"; row=next_row; col=next_col; } } cout<<"终点"; } x0 |
引用 | 编辑
唐老鸭
2005-03-31 04:26 |
18楼
▲ ▼ |
下面是引用凯西男孩于2005-03-30 23:29发表的 Re:【求助】c++也能写迷宫吗?><": 你不是要电脑自己走ㄇ= ="???? 还是要你自己按键盘走阿.... 你题目改来改去的.... 这样我很难帮你耶 ..... 我写的就是从起点(0,0)开始.... 终点是(2,2)..... 考虑电脑可以走的方向.... 然后做移动.... 最后将所有电脑走的路线列印出来..... 这不就是电脑自己移动了ㄇ ..... 只是我没有把判断重复路线的部分写完.... 还有判断叉路最后走错退回的部分.... 剩下的给你写让你发挥.... 但我已经至少帮你写了一半了.... 如果你是要画个迷宫.... 然后让电脑帮你走.... 你干嘛要走呢 ??? 让电脑模拟人脑的方式.... 看电脑走的结果就好了阿.... 除非你是要画图然后慢慢看电脑走.... 那你就补图上去.....加入一些时间的函数.... 让电脑慢慢移动给你看啰..... 不然就是还是由你自己按键盘走(原来的题目意思= =").... 那就比较简单了.... 你就自己写就好了..... x0 |
引用 | 编辑
Freelife
2005-03-31 10:30 |
19楼
▲ ▼ |
引用8楼的"夷希微"提供的地图做说明
假设左上是起点,右下是终点 (1)判断四边的顺序是,右->下->左->上->右..... (2)假设第1个判断的方向是"右"。 (3)程式一开始,判断右边有没有路 ->没有,判断下一个"下"->有,往下走一步。 (4)由于程式要求的是,沿着墙走,所以第二步之后,要确认墙所在的方向。 所以要从你上次走的方向"下",它的上一个判断值开始,也就是"右"。 (5)以上述的方式做判断,整理出走每一步的方法如下: ->起点在左上的位置。 ->第1步,"右"没有路,改走"下",有路,往下一步。 ->第2步,从"下"的上一个判断开始,"右"没有路,改走"下",有路,往下一步。 ->第3步,从"下"的上一个判断开始,"右"没有路,改走"下",有路,往下一步。 ->第4步,从"下"的上一个判断开始,"右"没有路,改走"下",有路,往下一步。 ->第5步,从"下"的上一个判断开始,"右"有路,往下一步。 ->第6步,从"右"的上一个判断开始,"上"没有路,改走"右",有路,往下一步。 ->第7步,从"右"的上一个判断开始,"上"有路,往下一步。 ->第8步,从"上"的上一个判断开始,"左"没有路,改走"上",有路,往下一步。 ->第9步,从"上"的上一个判断开始,"左"没有路,改走"上",有路,往下一步。 ->第10步,从"上"的上一个判断开始,"左"、"上"、"右"都没有路,改走"下",有路,往下一步。 ->第11步,从"下"的上一个判断开始,"右"没有路,改走"下",有路,往下一步。 ->第12步,从"下"的上一个判断开始,"右"有路,往下一步。 以此类推,一直走下去,最后就可以走到终点了。 如有错误,请各位不吝指教 x0 |
引用 | 编辑
唐老鸭
2005-03-31 10:55 |
20楼
▲ ▼ |
下面是引用Freelife于2005-03-31 10:30发表的 Re:【求助】c++也能写迷宫吗?><": 谢谢大大的说明.... 懂啦.... 原来这就是你说的沿墙壁走法阿.... 哈哈.... 蛮有趣的 ..... x0 |
引用 | 编辑
凯西男孩
2005-03-31 17:10 |
23楼
▲ ▼ |
请问有哪位好心的大大可以帮我跟同学改一下程式码,要把它改成8*8的,我们两个改不出来= =麻烦一下qq,以下是程式码,要改成8*8的喔!thank you!这个原本是4*5的= =麻烦各位大大了~
#include <iostream> #include <iomanip> #include <ctime> using namespace std; void reset(char(*)[5]); void print(const char(*)[5]); void d_reset(bool*); const char MAP[4][5]={ {Ƈ',Ɔ',Ɔ',Ƈ',Ƈ'}, {Ƈ',Ƈ',Ɔ',Ƈ',Ɔ'}, {Ɔ',Ƈ',Ƈ',Ɔ',Ɔ'}, {Ƈ',Ƈ',Ƈ',Ƈ',Ƈ'}}; int main (){ cout <<"MAP:" << endl; print(MAP); cout <<"search:" << endl; char a[4][5]={Ɔ'}; reset(a); int p[2] = {0, 0}; while(a[p[0]][p[1]]==Ƈ') { srand(time(0)); static int i=0; static bool d[4]={0}; if(i==0 && p[1]<4 && a[p[0]][p[1]+1]==Ƈ') {a[p[0]][p[1]]='*' p[1]+=1; d_reset(d); i=rand()%4;} else if(i==1 && p[0]<3 && a[p[0]+1][p[1]]==Ƈ') {a[p[0]][p[1]]='*' p[0]+=1; d_reset(d); i=rand()%4;} else if(i==2 && p[0]>0 && a[p[0]-1][p[1]]==Ƈ') {a[p[0]][p[1]]='*' p[0]-=1; d_reset(d); i=rand()%4;} else if(i==3 && p[1]>0 && a[p[0]][p[1]-1]==Ƈ') {a[p[0]][p[1]]='*' p[1]-=1; d_reset(d); i=rand()%4;} else { d=1; if(d[0]==1&&d[1]==1&&d[2]==1&&d[3]==1) {reset(a); i=0; d_reset(d); p[0]=0; p[1]=0;} else {while(d==1){i=rand()%4;}}} if(p[0]==3 && p[1]==4) { a[3][4]='*' print(a); cout << "success!!" << endl; char y; cout << "search next?(y/n) "; cin >> y; if(y=='n') break; reset(a); p[0]=p[1]=0; i=0; } } system("pause"); return 0; } void reset(char(*a)[5]) { for(int i=0; i<4; i++) for(int j=0; j<5; j++) a[j] = MAP[j]; } void print(const char(*A)[5]) { for(int i=0; i<4; i++) { for(int j=0; j<5; j++) cout << setw(2) << A[j]; cout << endl; } } void d_reset(bool* d) { for(int i=0; i<4; i++) d=0; } x0 |
引用 | 编辑
唐老鸭
2005-03-31 18:38 |
24楼
▲ ▼ |
老实说....
我看不懂你再写什么..... 没有一个完整题目.... 也不知道你要的需求.... 更不知道你给的程式码写的是否是对是错..... 要别人怎么帮你改 x0 |
引用 | 编辑
codeboy
2005-03-31 19:09 |
25楼
▲ ▼ |
下面是引用凯西男孩于2005-03-31 13:44发表的 Re:【求助】c++也能写迷宫吗?><": 原文书不是没用..而是你懒的看吧~.. 大部分的时候...原文书比中文书来的有用~ 搞技术的人应该都之知道原文书的重要的~ x1 |
引用 | 编辑
唐老鸭
2005-03-31 19:17 |
26楼
▲ ▼ |
下面是引用codeboy于2005-03-31 19:09发表的 Re:Re:【求助】c++也能写迷宫吗?><": 这个我认同.... 因为国内的书很多都翻译国外的..... 而且原文书大都写的比较详尽.... 虽然看会比较累一点.... 但学的也比较深入 .... x0 |