算法-基本专题bfs

struct qin{

  int wei;

  int ste;

  qin(int xx,int yy):wei(xx),ste(yy){}//牛逼呀

};

1queue没有que<××struct>a(100)括号里花里胡哨的东西。

2queue类型的定义 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),就要不断地入队出队

 

猜你喜欢

转载自www.cnblogs.com/ziyangbiog/p/10077593.html