[轉錄]生日快樂
※ [本文轉錄自 blueseami 看板]
作者: tung (2006夢想起飛~~) 站內: blueseami
標題: 生日快樂
時間: Mon Apr 10 01:02:58 2006
#include<iostream.h>
#include<iomanip.h>
#include<fstream.h>
#include"stack.h"
char* FileNameIn="maze.txt";
struct matrix
{
int data1;
int data2;
char chose;
};
int main()
{
STACK* path;
path=createstack();
STACK* section;
section=createstack();
fstream FileInput(FileNameIn, ios::in);
int maze[10][12];
int col=0;
int row=0;
while(FileInput.peek()!=EOF || row!=10 || col!=1)
{
if(col==12)
{
row++;
col=0;
if(row==10 && col==0)
break;
}
FileInput>>maze[row][col];
col=col+1;
}
for(int i=0;i<10;i++)
{
for(int j=0;j<12;j++)
{
cout<<setw(2)<<maze[i][j];
}
cout<<endl;
}
int m,n,p,q,count,x,y;
m=0;n=0;p=0;q=0;count=0;x=0;y=0;
matrix step[150];
int cstep=0;
matrix* last;
matrix* last1;
cout<<"2 is exit:(4,11)"<<endl;
cout<<"enter entrance ex:(1,1)"<<endl;
cin>>m>>n;
cout<<"the path of the astray mouse"<<endl;
step[cstep].data1=m;
step[cstep].data2=n;
step[cstep].chose='A';
last1=&step[cstep];
pushstack(section,&step[cstep]);
while(maze[m][n]!=2)
{
p=m+1;q=n;
if((maze[p][q]==0 || maze[p][q]==2) && (p!=last1->data1 || q!=last1->data2))
{
cstep++;
step[cstep].data1=p;
step[cstep].data2=q;
step[cstep].chose='B';
pushstack(section,&step[cstep]);
x=p;y=q;
count++;
}
p=m;q=n+1;
if((maze[p][q]==0 || maze[p][q]==2) && (p!=last1->data1 || q!=last1->data2))
{
cstep++;
step[cstep].data1=p;
step[cstep].data2=q;
step[cstep].chose='B';
pushstack(section,&step[cstep]);
x=p;y=q;
count++;
}
p=m-1;q=n;
if((maze[p][q]==0 || maze[p][q]==2) && (p!=last1->data1 || q!=last1->data2))
{
cstep++;
step[cstep].data1=p;
step[cstep].data2=q;
step[cstep].chose='B';
pushstack(section,&step[cstep]);
x=p;y=q;
count++;
}
p=m;q=n-1;
if((maze[p][q]==0 || maze[p][q]==2) && (p!=last1->data1 || q!=last1->data2))
{
cstep++;
step[cstep].data1=p;
step[cstep].data2=q;
step[cstep].chose='B';
pushstack(section,&step[cstep]);
x=p;y=q;
count++;
}
pushstack(path,&step[cstep-count]);
m=x;n=y;
if(count==1)
{
((matrix*)section->top->data)->chose='A';
last1=(matrix*)stacktop(path);
}
if(count>1)
{
last=(matrix*)popstack(section);
m=last->data1;
n=last->data2;
last->chose='A';
pushstack(section,&step[cstep-count]);
pushstack(section,last);
last1=(matrix*)stacktop(path);
}
if(count==0)
{
last=(matrix*)popstack(section);
while(((matrix*)section->top->data)->chose=='A')
{
last=(matrix*)popstack(section);
pushstack(path,last);
last1=last;
}
last=(matrix*)popstack(section);
pushstack(section,last);
last->chose='A';
m=(last->data1);
n=(last->data2);
cstep++;
step[cstep]=*last1;
cstep++;
step[cstep]=*last;
}
count=0;
}
pushstack(path,&step[cstep]);
STACK* mouse;
mouse=createstack();
cout<<"entry"<<endl;
while(path->count>=1)
{
last=(matrix*)popstack(path);
pushstack(mouse,last);
}
while(mouse->count>=1)
{
last=(matrix*)popstack(mouse);
cout<<"("<<last->data1<<","<<last->data2<<")"<<endl;
}
cout<<"goal"<<endl;
while(section->count>=1)
{
last1=(matrix*)popstack(section);
}
destroystack(mouse);
destroystack(path);
destroystack(section);
return 0;
}
-----------------------------
自己要用txt檔作一個像課本上面的迷宮
1是牆 0是通道 2是出口
1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 1 0 1 1 1 0 1
1 1 1 0 1 0 0 0 0 0 0 1
1 1 0 0 0 0 1 1 1 1 0 1
1 1 0 1 1 1 1 1 1 1 0 2
1 1 0 1 1 1 1 0 0 1 1 1
1 1 0 0 0 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1
免費再贈送迷宮一個
記得在做迷宮的時候 不要弄得太怪
因為我寫的程式很笨(我沒把那種東西考慮進去..冏rz)
如果有路徑是可以互通的 那就會無窮迴圈
只要有分支的路就可以了 不要太複雜
1
--
※ 風信遊子(bbs.cm.nctu.edu.tw) ★ Post From: 140.113.92.21 ★
→ tung: 你們可以把我的step[]改成pointer [04/10]
→ tung: 因為我上禮拜再寫的時候 為了保險他一定寫的出來 [04/10]
→ tung: 用比較安全的寫法...後來程式碼太大就不想改了 [04/10]
→ blueseami: 感謝你.......沒寫到你當真了 [04/10]
→ blueseami: 超級棒的生日禮物ㄟ [04/10]
→ blueseami: 我會好好參悟一下 [04/10]
→ tung: 我怕你們會笑我程式寫的很醜 因為我沒有先寫演算法 [04/10]
→ tung: 我都是想到什麼寫什麼進去的...所以看起來會很亂 [04/10]
→ tung: 但是功能一定有啦!! [04/10]
→ blueseami: 我哪敢笑...... [04/10]
→ blueseami: 我還寫不出來勒 [04/10]
--
≡中女一北≡
0351801樂
--
※ 風信遊子(bbs.cm.nctu.edu.tw) ★ Post From: 140.113.68.3 ★
NetSecurity 近期熱門文章
PTT數位生活區 即時熱門文章