优先队列又挂了,求找错
查看原帖
优先队列又挂了,求找错
414491
雪乃0v0楼主2021/10/16 20:51
# include <cstdio> 
# include <iostream>
# include <cstring>
# include <algorithm>
# include <queue>
using namespace std;
const int inf = 1e9;
const int dx[12] = {0,0,-1,1,0,0,-1,-1,-2,1,1,2};
const int dy[12] = {-1,1,0,0,2,-2,1,-1,0,1,-1,0};
const int dw[12] = {0,0,0,0,2,2,2,2,2,2,2,2};
int m,n,x,y,op,map[110][110],ans[110][110];
bool vis[110][110];
struct Node{
    int x,y,w;
};
bool operator < (const Node a,const Node b){
    return a.w>b.w;
}
priority_queue<Node>Q;
void bfs(){
    Q.push((Node){1,1,0});//程序又在这挂了 
    cout << -1;
    
    while(!Q.empty()){
        Node node = Q.top();Q.pop();
        int x = node.x,y = node.y,w = node.w;
        if(!vis[x][y])continue;
        ans[x][y] = w,vis[x][y] = false;
        for(int i= 0 ; i < 12; i++){
            int nx = x+dx[i],ny = y+dy[i],nw = w+dw[i]; 
            if(nx <= 0 || nx > m || ny <= 0 || ny > m || vis[nx][ny] == false || map[nx][ny] == -1) continue;
            if(map[nx][ny] != map[x][y]) Q.push((Node){nx,ny,nw+1});
            else Q.push((Node){nx,ny,nw});   
        }
    } 
}
int main(){
    for(int i= 1; i<= 110;i++) for(int j = 1; j<= 110; j++) map[i][j] =-1,vis[i][j] = true,ans[i][j] = inf;//初始化 
    scanf("%d%d",&m,&n);
    while(n --){
        scanf("%d%d%d",&x,&y,&op);
        map[x][y] = op;
    }
    bfs();
    ans[m][m] = min(ans[m][m],min(ans[m-1][m],ans[m][m-1])+2);
    if(ans[m][m] == inf)printf("-1");
    else printf("%d",ans[m][m]);
}
2021/10/16 20:51
加载中...