zoukankan      html  css  js  c++  java
  • LeetCode 1368. 使网格图至少有一条有效路径的最小代价【最短路】

    传送门

    题解

    题目说可以花费代价 (1) 调整方向,换个意思就是说,
    如果沿着原方向走,代价为 (0),否则代价为 (1),求从点 ((0,0)) 到点 ((n-1,m-1)) 的最小代价,
    这其实就是个最短路问题了,可以直接上Dijkstra。
    然而这个也可以用BFS直接解决,把queue换成deque,然后沿0边走的点放到队头,沿1边走的点放到队尾,这样BFS出来也是最短路。

    代码

    class Solution {
    public:
        int n,m,f[110][110],dis[110][110],vis[110][110];
        int d[5][2]={{},{0,1},{0,-1},{1,0},{-1,0}};
        struct Turp{
            int x,y,w;
            friend bool operator < (const Turp &a,const Turp &b){
                return a.w>b.w;
            }
        };
        priority_queue<Turp> pq;
        
        int minCost(vector<vector<int>>& grid) {
            n=grid.size(),m=grid[0].size();
            memset(dis,0x3f,sizeof(dis));
            dis[0][0]=0;
            pq.push((Turp){0,0,0});
            while(!pq.empty()){
                int ux=pq.top().x,uy=pq.top().y;pq.pop();
                if(vis[ux][uy]) continue;
                vis[ux][uy]=1;
                for(int i=1;i<=4;i++){
                    int vx=ux+d[i][0],vy=uy+d[i][1],len=(i!=grid[ux][uy]);
                    if(vx<0||vx==n||vy<0||vy==m) continue;
                    if(dis[vx][vy]>dis[ux][uy]+len){
                        dis[vx][vy]=dis[ux][uy]+len;
                        pq.push((Turp){vx,vy,dis[vx][vy]});
                    }
                }
            }
            return dis[n-1][m-1];
        }
    };
    
  • 相关阅读:
    day3-python之函数进阶(三)
    day3-python之函数初识(二)
    day3-python之文件操作(一)
    tomcat
    集群
    nginx
    nginx--zabbix监控status waiting
    zabbix监控之mysql主从状态&mysql主从延迟
    zabbix监控之进程&日志监控
    zabbix监控流程(监控linux上某个文件是否有改动)
  • 原文地址:https://www.cnblogs.com/BakaCirno/p/12421107.html
Copyright © 2011-2022 走看看