首页 > 其他分享 >每日一题 力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/

每日一题 力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/

时间:2023-05-24 21:46:47浏览次数:61  
标签:neithbor cn isVisit seconds graph after int 节点 dp

力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/

这道题目用dp去做,构建邻接矩阵,做的时候需要注意题目条件,如果青蛙跳不动了,这个概率就保持不变了

一般跳青蛙,很容易想到dp

核心代码如下

public double frogPosition(i
public double frogPosition(int n, int[][] edges, int t, int target) {


//    用邻接矩阵表示
    int[][] graph = new int[n+1][n+1];


    for (int i = 0; i < edges.length; i++) {
        int[] edge = edges[i];

        int start=edge[0];
        int end=edge[1];
    //    无向图
        graph[start][end]=1;
        graph[end][start]=1;

    }
    int[] isVisit = new int[n+1];
    //1.dp[i][j] 表示i顶点 j秒时候的概率
    double[][] dp = new double[n+1][t+1];


//    2.递推见循环

//    3.初始化1号点
    dp[1][0]=1;
    isVisit[1]=1;
    for (int time = 1; time <= t; time++) {

    //    拿出当前time--的值 从它们出发 ,然后计算能够到达的点

        for (int i = 0; i < dp.length; i++) {

            if (dp[i][time-1]!=0){
            //    这个地方可以往下面走

            //    顶点是i

            //    找顶点i的临界节点
              List<Integer> neithbor =getNeighbor(graph,i,isVisit);

            //  这些节点 新加概率
                for (int j = 0; j < neithbor.size(); j++) {

                    dp[neithbor.get(j)][time]+=dp[i][time-1]/neithbor.size();
                    isVisit[neithbor.get(j)]=1;

                }


            //    如果neithbor.size是0的话,说明谁也到不了,以后这个点的概率就固定死了
                if (neithbor.isEmpty()){
                    for (int j = time; j <= t; j++) {
                        dp[i][j]=dp[i][time-1];
                    }
                }


            }

        }


    }





    // for (int i = dp[target].length-1; i >=0; i--) {
    //     if (dp[target][t]!=0){
    //         return dp[target][t];
    //     }
    //     t--;
    // }

    return dp[target][t];







}

private List<Integer> getNeighbor(int[][] graph, int start, int[] isVisit) {

    ArrayList<Integer> list = new ArrayList<>();
    int[] neithbor = graph[start];


    for (int i = 0; i < neithbor.length; i++) {
        if (neithbor[i]==1){
            if (isVisit[i]==0){
                list.add(i);
            }
        }
    }
    return list;
}

更好的

官方用了dfs去做

 

dfs思路是判断这个节点有多少个叶子节点

一层层递归进去,知道找到了target,再往外返回的时候,计算ans/节点个数

起始只要算节点有多少个就行了,要经过多少次边才会到达这个节点

比如说题目给的图片 4递归回去2 有2个节点,2递归回去1有3个节点 ,那么4的概率就是1/(2*3)

 

 

民间有个很好的想法

该怎么避免精度丢失,让精度丢失的越少越好

做法 既然答案是由若干分子为 的分数相乘得到,那么干脆只把分母相乘,最后再计算一下倒数,就可以避免因浮点乘法导致的精度丢失了。另外,整数的计算效率通常比浮点数的高。

标签:neithbor,cn,isVisit,seconds,graph,after,int,节点,dp
From: https://www.cnblogs.com/gulilearn/p/17429599.html

相关文章

  • 图像分类基于cnn的戴口罩和不戴口罩的分类任务-详细教程文档(视频同款)
    图像分类基于cnn的戴口罩和不戴口罩的分类任务-详细教程文档(视频同款)......
  • 什么是CN2线路?有哪些优缺点?
    搭建网站服务首先需要服务器,而如果服务器在中国大陆,就需要备案,使用境外服务器则不需要备案,而使用国外服务器时国内用户访问速度就会很慢,因此很多服务器商家推出了CN2云服务器主机,常见的有香港CN2服务器,美国CN2服务器,韩国CN2服务器,日本CN2服务器,这些服务器主要针对中国大陆的访问......
  • MySQL8.0配置my.cnf
    环境centos7.9因为是源码安装的MySQL8.0.32,查了一下MySQL8.0之后源码中不包含my.cnf文件和my-default.cnf文件了。手动创建一个my.cnf,放到默认目录/etc下,以后修改配置可以从my.cnf文件中修改,重启生效,相当于永久生效。文件内容:暂时先配这些,后期再扩展[client]port=3306soc......
  • FX110网:西班牙CNMV警告这6家交易商没有监管授权
    2023年5月22日,西班牙金融监管机构CNMV对6家未经授权的外汇交易商发出警告。根据《证券市场法》第17条第二款(由10月23日第4/2015号皇家法令批准的重订文本),西班牙国家证券市场委员会(ComisiónNacionaldelMercadodeValores)警告,以下公司未获授权提供《西班牙证券市场法》第140......
  • C++ 手搓 CNN 卷积神经网络
    代码请自取https://github.com/xoslh/CNN-MNIST-CPP-1卷积神经网络-CNN的基本原理​ 卷积神经网络(ConvolutionalNeuralNetworks,CNNs)是一种深度学习算法,特别适用于图像处理和分析。其设计灵感来源于生物学中视觉皮层的机制,是一种强大的特征提取和分类工具。1.1Layers......
  • DataBase can’t be open after shutdown immediate
    五一放假期间,某客户的数据库出现故障,据说对方找了一些工程师折腾了一天,都无法将数据库open,其中参考了网络上的很多文章,也使用了一系列隐含参数,均无法将数据库打开。这里我简单的与大家分享一下这个case。首先我介绍一下整个case的背景,客户在4月30号凌晨通过shutdownimmediate停......
  • buuctf ciscn_2019_n_5 pwn ret2shellcode
    首先checksec查看保护策略,没有开栈不可执行NX,考虑构造shellcodeArch:amd64-64-littleRELRO:PartialRELROStack:NocanaryfoundNX:NXdisabledPIE:NoPIE(0x400000)RWX:HasRWXsegments查看反编译代码,可以看......
  • oracle中SCN详细解析
    在Oracle数据库中,SCN表示数据库中状态变化的时间点,是一个连续唯一的数字标识符。SCN的类型比较多,本文将会详细介绍控制文件中的SCN、检查点(SCNCheckpoint)、数据文件的起始SCN和终止SCN、归档日志的SCN以及在线日志的SCN,同时描述这些不同类型的SCN之间的关系。控制文件中的SCN在O......
  • 利用卷积神经网络的Text-CNN 文本分类
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]TextCNN是利用卷积神经网络对文本进行分类的算法,由YoonKim在“ConvolutionalNeuralNetworksforSentenceClassification”一文(见参考[1])中提出.TextCNN是利用卷积神经网络对文本进行分类的算法,由YoonKim在“Conv......
  • 博客主题-cnbook
    博客主题——cnbook-GShang-博客园https://www.cnblogs.com/gshang/p/12986360.html......