就是硬算,没有捷径
#include <iostream>
#include<stack>
using namespace std;
#define ROW 10
#define COL 10
struct Path{
int x;
int y;
bool isFind;
};
enum direct{
P_up,
P_left,
P_down,
P_right
}dir;
void map(int Map[10][10])
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(Map[i][j]==1)
{
cout<<"墙";
}
else {
cout<<" ";
}
}
cout<<endl;
}
}
void mapment(Path path[][10],int Map[10][10])
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(Map[i][j]==1)
{
path[i][j].x=j;
path[i][j].y=i;
path[i][j].isFind=true;
cout<<"墙";
}
else {
path[i][j].x=j;
path[i][j].y=i;
path[i][j].isFind=false;
cout<<" ";
}
}
cout<<endl;
}
}
int main()
{
int Map[ROW][COL]={
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1},
{1,0,1,0,1,0,0,1,1,1},
{1,0,0,0,0,0,1,1,1,1},
{1,0,1,0,1,0,1,1,1,1},
{1,0,1,1,1,0,1,0,1,1},
{1,0,1,1,1,0,0,0,1,1},
{1,1,1,1,1,1,1,0,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
//system("cls");
//map(Map);
stack<Path> pathstack;
Path begin = {1,1,true};
Path end = {7,8,false};
Path now[10][10]={};
mapment(now,Map);
Path current = begin;
while(1)
{
int row=current.y;
int col = current.x;
switch (P_up)
{
case P_up:
if(now[--row][col].isFind==false)
{
if(row==end.y&&col==end.x)//判断是否为终点
{
cout<<"终点0"<<endl;
pathstack.push(now[row][col]);
while(!pathstack.empty())
{
cout<<"("<<pathstack.top().x<<","<<pathstack.top().y<<")"<<endl;
pathstack.pop();
}
return 0;
}
current.x=col;
current.y=row;
now[row][col].isFind=true;
pathstack.push(now[row][col]);
break;
}
else{
};
case P_left:
if(now[++row][--col].isFind==false)
{
if(row==end.y&&col==end.x)//判断是否为终点
{
cout<<"终点1"<<endl;
pathstack.push(now[row][col]);
while(!pathstack.empty())
{
cout<<"("<<pathstack.top().x<<","<<pathstack.top().y<<")"<<endl;
pathstack.pop();
}
return 0;
}
current.x=col;
current.y=row;
now[row][col].isFind=true;
pathstack.push(now[row][col]);
break;
}
else {
};
case P_down:
if(now[++row][++col].isFind==false)
{
if(row==end.y&&col==end.x)//判断是否为终点
{
cout<<"终点2"<<endl;
pathstack.push(now[row][col]);
while(!pathstack.empty())
{
cout<<"("<<pathstack.top().x<<","<<pathstack.top().y<<")"<<endl;
pathstack.pop();
}
return 0;
}
current.x=col;
current.y=row;
now[row][col].isFind=true;
pathstack.push(now[row][col]);
break;
}
else {
};
case P_right:
if(now[--row][++col].isFind==false)
{
if(row==end.y&&col==end.x)//判断是否为终点
{
cout<<"终点3"<<endl;
pathstack.push(now[row][col]);
while(!pathstack.empty())
{
cout<<"("<<pathstack.top().x<<","<<pathstack.top().y<<")"<<endl;
pathstack.pop();
}
return 0;
}
current.x=col;
current.y=row;
now[row][col].isFind=true;
pathstack.push(now[row][col]);
break;
}
else {
};
default:
pathstack.pop();
current.x=pathstack.top().x;
current.y=pathstack.top().y;
break;
}
}
while(!pathstack.empty())
{
cout<<"("<<pathstack.top().x<<","<<pathstack.top().y<<")"<<endl;
pathstack.pop();
}
return 0;
}