算法-基本专题bfs
struct qin{
int wei;
int ste;
qin(int xx,int yy):wei(xx),ste(yy){}//牛逼呀
};
1,queue没有que<××struct>a(100)括号里花里胡哨的东西。
2,queue类型的定义 struct qin要初始化:
queue<××struct> a;//广搜标配
qin l = a.front;//取第一个元素
#include<bits/stdc++.h>
using namespace std;
struct qin{
int x;
int y;
int ste;
qin(int xx,int mm,int yy):x(xx),y(mm),ste(yy){}
};
int main()
{
queue<qin> a;
int x;
int zu[5][5];
int m[5][5];
memset(zu,0, sizeof(zu));
memset(m,0, sizeof(m));
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cin>>zu[i][j];
m[i][j]=zu[i][j];
}
}
a.push(qin(0,0,0));
while(!a.empty()){
qin l=a.front();
m[l.x][l.y]=1;
if(l.x==5&&l.y==5){
cout<<l.ste<<endl;
return 0;
}
else{
if(l.x>0&&!m[l.x-1][l.y]){
a.push(qin(l.x-1,l.y,l.ste+1));
m[l.x-1][l.y]=1;
}
if(l.y>0&&!m[l.x][l.y-1]){
a.push(qin(l.x,l.y-1,l.ste+1));
m[l.x][l.y-1]=1;
}
if(l.x<5&&!m[l.x+1][l.y]){
a.push(qin(l.x+1,l.y,l.ste+1));
m[l.x+1][l.y]=1;
}
if(l.y<5&&!m[l.x][l.y+1]){
a.push(qin(l.x,l.y+1,l.ste+1));
m[l.x][l.y+1]=1;
}
a.pop();
}
}
}
//状态,,要不断的改变状态以成为目标状态 (x==5&&y==5),就要不断地入队出队