博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【图论算法】Dijstra&BFS
阅读量:6306 次
发布时间:2019-06-22

本文共 3037 字,大约阅读时间需要 10 分钟。

 

选择V-S中的点加入S时用了贪心思想,即求d[]中legth最小且未被标记(未加入加入S)的点。

一点都没优化的实现:

1 import java.lang.reflect.Array; 2  3 /** 4  * Created by yueli on 2018/10/14. 5  */ 6 public class Dijkstra { 7     boolean mark[]=new boolean[5]; 8     int v[][]={
{0,10,-1,30,100}, {-1,0,50,-1,-1},{-1,-1,0,-1,10},{-1,10,20,0,60},{-1,-1,-1,-1,0}}; 9 class Dist{10 public int pre;11 public int length;12 public Dist(){}13 public Dist(int pre,int length){14 this.pre=pre;15 this.length=length;16 }17 }18 int maxInt=0xfffffff;19 public Dist D[]=new Dist[5];20 boolean AllMarked(){21 for(int i=0;i
0&&D[i].length
0&&(D[i].length>D[u].length+v[u][i]||D[i].length<0)){48 D[i].length=D[u].length+v[u][i];49 D[i].pre=u;50 }51 }52 }53 void printD(){54 for(int i=0;i<5;i++){55 System.out.print("pre:"+D[i].pre+" length:"+D[i].length+" ");56 }57 System.out.println();58 }59 void printV(){60 for(int i=0;i<5;i++) {61 for (int j = 0; j < 5; j++)62 System.out.print(v[i][j]+" ");63 System.out.println();64 }65 }66 public static void main(String[] args) {67 Dijkstra dijkstra=new Dijkstra();68 dijkstra.printV();69 dijkstra.dijkstra(0);70 }71 }
View Code
void dijkstra(final int s){        for(int i=0;i<5;i++) {            D[i]=new Dist();            D[i].pre = s;            D[i].length = v[s][i];            mark[i]=false;        }        int u=s;        mark[s]=true;        while (!AllMarked()){            int min=maxInt;            for(int i=0;i<5;i++)                if(!mark[i]&&D[i].length>0&&D[i].length
0&&(D[i].length>D[u].length+v[u][i]||D[i].length<0)){ D[i].length=D[u].length+v[u][i]; D[i].pre=u; } } }
0 10 -1 30 100 -1 0 50 -1 -1 -1 -1 0 -1 10 -1 10 20 0 60 -1 -1 -1 -1 0 {+1} pre:0 length:0 pre:0 length:10 pre:0 length:-1 pre:0 length:30 pre:0 length:100 {+3} pre:0 length:0 pre:0 length:10 pre:1 length:60 pre:0 length:30 pre:0 length:100 {+2} pre:0 length:0 pre:0 length:10 pre:3 length:50 pre:0 length:30 pre:3 length:90 {+4} pre:0 length:0 pre:0 length:10 pre:3 length:50 pre:0 length:30 pre:2 length:60 Process finished with exit code 0
#include 
#include
using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */bool allMarked(bool *mark,const int n){ for(int i=0;i
q; bool *mark=new bool[n]; q.push(s);mark[s]=1; while(!q.empty()||!allMarked(mark,n)){ while(!q.empty()){ s=q.front(); q.pop(); cout<
<<" "; for(int i=0;i
q; bool *mark=new bool[n];}int main(int argc, char *argv[]) { bool v[][5]={ {
0,1,1,0,0}, {
0,0,1,1,1}, {
0,0,0,0,0}, {
0,0,0,0,1}, {
0,0,0,0,0}}; BFS(v,5,0); return 0;}

 

转载于:https://www.cnblogs.com/yuelien/p/9788072.html

你可能感兴趣的文章
Richard M. Stallman 给《自由开源软件本地化》写的前言
查看>>
oracle数据库密码过期报错
查看>>
修改mysql数据库的默认编码方式 .
查看>>
zip
查看>>
How to recover from root.sh on 11.2 Grid Infrastructure Failed
查看>>
rhel6下安装配置Squid过程
查看>>
《树莓派开发实战(第2版)》——1.1 选择树莓派型号
查看>>
在 Linux 下使用 fdisk 扩展分区容量
查看>>
结合AlphaGo算法和大数据的量化基本面分析法探讨
查看>>
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
《OpenACC并行编程实战》—— 导读
查看>>
机器学习:用初等数学解读逻辑回归
查看>>
如何在 Ubuntu 中管理和使用逻辑卷管理 LVM
查看>>
Oracle原厂老兵:从负面案例看Hint的最佳使用方式
查看>>
把自己Github上的代码添加Cocoapods支持
查看>>
C语言OJ项目参考(2493)四则运算
查看>>
零基础入门深度学习(二):神经网络和反向传播算法
查看>>
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
WKWebView代理方法解析
查看>>