The shortest road width search
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<queue>
#include<stack>
using namespace std;
int maze[5][5];
bool use[5][5];
int pos[4][2] = {{1,0},{0,1},{0,-1},{-1,0}};
class Node{
public:
int x,y;
Node() = default;
Node(int x,int y){
this->x = x;
this->y = y;
}
};
Node pre[5][5];
void get_data(){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
scanf("%d",&maze[i][j]);
use[i][j] = false;
pre[i][j] = Node(-1,-1);
}
}
}
void solve(){
queue<Node> que;
que.push(Node(0,0));
while(!que.empty()){
Node cur = que.front();
que.pop();
for(int i=0;i<4;i++){
Node move;
move.x = cur.x + pos[i][0];
move.y = cur.y + pos[i][1];
if(move.x>=0&&move.x<=4&&move.y>=0&&move.y<=4&&!use[move.x][move.y]&&maze[move.x][move.y]==0){
use[move.x][move.y] = true;
que.push(Node(move.x,move.y));
pre[move.x][move.y] = Node(cur.x,cur.y);
}
}
if(use[4][4]) break;
}
stack<Node> sta;
int prex = 4, prey = 4;
while(prex!=0||prey!=0){
sta.push(Node(prex,prey));
int _prex = prex, _prey = prey;
prex = pre[_prex][_prey].x;
prey = pre[_prex][_prey].y;
}
sta.push(Node(0,0));
while(!sta.empty()){
Node curr = sta.top();
sta.pop();
printf("(%d, %d)\n",curr.x,curr.y);
}
}
int main(){
get_data();
solve();
system("pause");
return 0;
}