STL--BFS(广度优先搜索)

广度优先搜索又名bfs,广搜。
它是基础算法之一,对初学者来说比较难懂。
它是利用优先队列来进行图的便历。
而普通的bfs我就不粘贴于此了。
但是我还是来说一说广度优先搜索吧!

struct node{
    int x,y,t;
    bool operator< (node o)const{
        return t>o.t;//满足堆的性质
    }
};
int bfs(int n,int m){
    priority_queue q;
        int sx=1,sy=1;
        visit[sx][sy]=true;
        q.push((node){sx,sy,0});
        while(!q.empty()){
            int x=q.top().x,y=q.top().y,t=q.top().t,xx,yy;
            q.pop();
            if(x==n&&y==m)
                return t;
            for(int i=0;i<4;++i){
                xx=x+dx[i];yy=y+dy[i];
                if(xx<1||yy<1||xx>n||yy>m)
                    continue;
                }
                if(visit[xx][yy])
                    continue;
                visit[xx][yy]=true;
                q.push((node){xx,yy,t+1});
            }
        }
    }   

你可能感兴趣的:(STL--BFS(广度优先搜索))