c++高手快来帮忙啊!
发布网友
发布时间:2024-10-20 15:37
我来回答
共1个回答
热心网友
时间:2024-12-01 05:49
由三个文件组成,这是C++项目。
//POS.H
#pragma once
class pos
{
public:
pos(void);
~pos(void);
int x;
int y;
void up(void);
void down(void);
void left(void);
void right(void);
};
//pos.cpp
#include "pos.h"
pos::pos(void)
{
x=1;
y=1;
}
pos::~pos(void)
{
}
void pos::up(void)
{
x=x-1;
}
void pos::down(void)
{
x=x+1;
}
void pos::left(void)
{
y=y-1;
}
void pos::right()
{
y=y+1;
}
//mgqj.cpp
#include <iostream>
#include <stack>
#include <string>
#include <time.h>
#include "pos.h"
using namespace std;
const int canmove=1;
const int passed=2;
const int cantmove=0;
const int death=3;
int main()
{
string s="again";
do
{
system("cls");
srand(time(NULL));
int a[10][20];
for(int i=0;i<10;i++)
for(int j=0; j<20;j++)
a[i][j]=0;
for(int i=1;i<9;i++)
for(int j=1;j<19;j++)
if(rand()%3!=0) a[i][j]=canmove;
else a[i][j]=cantmove;
a[1][1]=canmove;
a[8][18]=canmove;
for(int i=0;i<10;i++)
{
for(int j=0;j<20;j++)
if(a[i][j]==cantmove) cout<<"*";
else cout<<" ";
cout<<endl;
}
pos nowpos;
stack<pos> mglj;
a[1][1]=passed;
mglj.push(nowpos);
while(!mglj.empty())
{
if(mglj.top().x==8&&mglj.top().y==18) break;
nowpos=mglj.top(); nowpos.right();
if(a[nowpos.x][nowpos.y]==canmove)
{
mglj.push(nowpos);
a[nowpos.x][nowpos.y]=passed;
continue;
}
nowpos=mglj.top(); nowpos.down();
if(a[nowpos.x][nowpos.y]==canmove)
{
mglj.push(nowpos);
a[nowpos.x][nowpos.y]=passed;
continue;
}
nowpos=mglj.top(); nowpos.left();
if(a[nowpos.x][nowpos.y]==canmove)
{
mglj.push(nowpos);
a[nowpos.x][nowpos.y]=passed;
continue;
}
nowpos=mglj.top(); nowpos.up();
if(a[nowpos.x][nowpos.y]==canmove)
{
mglj.push(nowpos);
a[nowpos.x][nowpos.y]=passed;
continue;
}
nowpos=mglj.top();
mglj.pop();
a[nowpos.x][nowpos.y]=death;
}
if(mglj.empty()) cout<<"迷宫不可通过"<<endl;
else
{
cout<<"查找路径成功"<<endl;
}
for(int i=0;i<10;i++)
{
for(int j=0;j<20;j++)
if(a[i][j]==cantmove) cout<<"*";
else if(a[i][j]==passed) cout<<"^";
else if(a[i][j]==death) cout<<"D";
else cout<<" ";
cout<<endl;
}
cout<<"输入again将生成新的迷宫,exit退出程序"<<endl;
cin>>s;
}while(s=="again");
system("pause");
return 0;
}