广搜

来源:互联网 发布:国外 恐怖 知乎 编辑:程序博客网 时间:2024/04/16 23:42

广搜 优先队列

#define N 305     //行#define M 305    //列struct zuobiao{     //储存坐标和走到当前坐标所需最小步数    int x,y;    int sum;    friend bool operator < (zuobiao a, zuobiao b)    {        return a.sum>b.sum;   //值小的优先级高    }}p,k;char  t[N][M];int vis[N][M],n,m,kk;int q_x,q_y,z_x,z_y;int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};//循环处理坐标上下左右priority_queue<zuobiao>q;int judge()      //判断是否可以入队函数{    if(k.x>=0&&k.x<N&&k.y>=0&&k.y<M&&       (t[k.x][k.y]=='E'||t[k.x][k.y]=='B')&&vis[k.x][k.y]==0)        return 1;    return 0;}void bfs(){    memset(vis,0,sizeof(vis));    while(!q.empty())q.pop();    p.x=q_x;    p.y=q_y;    p.sum=0;    q.push(p);    vis[p.x][p.y]=1;    while(!q.empty())    {        p=q.top();        q.pop();        if(p.x==z_x&&p.y==z_y)//判断是否是终点        {            cout<<p.sum<<endl;  //输出终点            kk=0;            break;        }        for(int i=0;i<4;i++)//四个方向        {            k.x=p.x+dir[i][0];            k.y=p.y+dir[i][1];            k.sum=p.sum+1;            if(judge())//判断是否符合标准            {                if(t[k.x][k.y]=='B')                    k.sum+=1;                vis[k.x][k.y]=1;                q.push(k);            }        }    }}

广搜

#define N 305     //行#define M 305    //列struct zuobiao{     //储存坐标和走到当前坐标所需最小步数    int x,y;    int sum;}p,k;char  t[N][M];int vis[N][M],n,m,kk;int q_x,q_y,z_x,z_y;int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};//循环处理坐标上下左右queue<zuobiao>q;int judge()      //判断是否可以入队函数{    if(k.x>=0&&k.x<N&&k.y>=0&&k.y<M&&       (t[k.x][k.y]=='E')&&vis[k.x][k.y]==0)        return 1;    return 0;}void bfs(){    memset(vis,0,sizeof(vis));    while(!q.empty())q.pop();    p.x=q_x;    p.y=q_y;    p.sum=0;    q.push(p);    vis[p.x][p.y]=1;    while(!q.empty())    {        p=q.top();        q.pop();        if(p.x==z_x&&p.y==z_y)//判断是否是终点        {            cout<<p.sum<<endl;  //输出终点            kk=0;            break;        }        for(int i=0;i<4;i++)//四个方向        {            k.x=p.x+dir[i][0];            k.y=p.y+dir[i][1];            k.sum=p.sum+1;            if(judge())//判断是否符合标准            {                vis[k.x][k.y]=1;                q.push(k);            }        }    }}