【图论算法】Dijstra&BFS
选择V-S中的点加入S时用了贪心思想,即求d[]中legth最小且未被标记(未加入加入S)的点。
一点都没优化的实现:
import java.lang.reflect.Array; /**
* Created by yueli on 2018/10/14.
*/
public class Dijkstra {
boolean mark[]=new boolean[5];
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}};
class Dist{
public int pre;
public int length;
public Dist(){}
public Dist(int pre,int length){
this.pre=pre;
this.length=length;
}
}
int maxInt=0xfffffff;
public Dist D[]=new Dist[5];
boolean AllMarked(){
for(int i=0;i<mark.length;i++)
if(!mark[i])
return false;
return true;
}
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<min){
min=D[i].length;
u=i;
}
System.out.print("{+"+u+"} ");
printD();
if(min==maxInt)break;
mark[u]=true;
for(int i=0;i<5;i++)
if(v[u][i]>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;
}
}
}
void printD(){
for(int i=0;i<5;i++){
System.out.print("pre:"+D[i].pre+" length:"+D[i].length+" ");
}
System.out.println();
}
void printV(){
for(int i=0;i<5;i++) {
for (int j = 0; j < 5; j++)
System.out.print(v[i][j]+" ");
System.out.println();
}
}
public static void main(String[] args) {
Dijkstra dijkstra=new Dijkstra();
dijkstra.printV();
dijkstra.dijkstra(0);
}
}
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<min){
min=D[i].length;
u=i;
}
System.out.print("{+"+u+"} ");
printD();
if(min==maxInt)break;
mark[u]=true;
for(int i=0;i<5;i++)
if(v[u][i]>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 <iostream>
#include<Queue>
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=;i<n;i++){
if(!mark[i]){
return false;
}
}
return true;
}
int getFirstUnmarked(bool* mark,const int n){
for(int i=;i<n;i++){
if(!mark[i]){
return i;
}
}
return -;
}
void BFS(bool d[][],const int n,int s){
queue<int>q;
bool *mark=new bool[n];
q.push(s);mark[s]=;
while(!q.empty()||!allMarked(mark,n)){
while(!q.empty()){
s=q.front();
q.pop();
cout<<s<<" ";
for(int i=;i<n;i++){
if(!mark[i]&&d[s][i]){
q.push(i);
mark[i]=;
}
}
}
if(!allMarked(mark,n)){
q.push(getFirstUnmarked(mark,n));
}
}
}
void DFS(bool d[][],const int n,int s){
queue<int>q;
bool *mark=new bool[n];
}
int main(int argc, char *argv[]) {
bool v[][]={
{,,,,},
{,,,,},
{,,,,},
{,,,,},
{,,,,}};
BFS(v,,);
return ;
}
【图论算法】Dijstra&BFS的更多相关文章
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- 图论算法-网络最大流【EK;Dinic】
图论算法-网络最大流模板[EK;Dinic] EK模板 每次找出增广后残量网络中的最小残量增加流量 const int inf=1e9; int n,m,s,t; struct node{int v, ...
- 【WIP_S9】图论算法
创建: 2018/06/01 图的概念 有向边 有向图 无向边 无向图 点的次数: 点连接的边的数量 闭路: 起点和重点一样 连接图: 任意两点之间都可到达 无闭路有向图: 没有闭路的有向图 森林: ...
- NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先
系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 最短路 Floyd 基本思路:枚举所有点与点的中点,如果从中点走最短,更新两点间 ...
- NOIp 图论算法专题总结 (3):网络流 & 二分图 简明讲义
系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 网络流 概念 1 容量网络(capacity network)是一个有向图,图的 ...
- 图论算法-Tarjan模板 【缩点;割顶;双连通分量】
图论算法-Tarjan模板 [缩点:割顶:双连通分量] 为小伙伴们总结的Tarjan三大算法 Tarjan缩点(求强连通分量) int n; int low[100010],dfn[100010]; ...
- tarjan图论算法
tarjan图论算法 标签: tarjan 图论 模板 洛谷P3387 [模板]缩点 算法:Tarjan有向图强连通分量+缩点+DAGdp 代码: #include <cstdio> #i ...
- [算法模版]Tarjan爷爷的几种图论算法
[算法模版]Tarjan爷爷的几种图论算法 前言 Tarjan爷爷发明了很多图论算法,这些图论算法有很多相似之处(其中一个就是我都不会).这里会对这三种算法进行简单介绍. 定义 强连通(strongl ...
- NOIp 图论算法专题总结 (2)
系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 树链剖分 https://oi-wiki.org/graph/heavy-lig ...
- 图论算法(一)存图与STL第六弹——vector容器
图论算法(一)存图 我发现我的博客阅读量贼低,问小伙伴们,ta们都说这些博客太长了QAQ! 今天来个短亿点的(也短不了多少……) 进入正题,图论究竟是什么? 图论就是给你一张图,让你在这张图上进行各种 ...
随机推荐
- [题解] LuoguP4609 [FJOI2016]建筑师
传送门 首先对于高度为\(n\)的建筑,他的左边有\(A-1\)个建筑能被看到,右边有\(B-1\)个建筑能被看到,这两者类似,所以先来看左边. 一个建筑将会遮挡住它后面的高度比它矮的建筑,直到一个高 ...
- Bean 注解(Annotation)配置(1)- 通过注解加载Bean
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
- Java高级特性——注解,这也许是最简单易懂的文章了
最近,浪尖在做flink的项目时source和sink的绑定那块用到了注解,当然新版本1.6以后就变为server load的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
- 腾讯云Windows2016数据中文版环境搭建
最近忙活了好几天,在腾讯云上买了台服务器,系统是Windows2016数据中文版,用于个人的学习,下面说一下整个流程吧. 遇到的问题: 一开始是按照腾讯云的指南文档去搞环境配置的,但它上面都是以Win ...
- V-Distpicker不能完整显示内容
V-Distpicker插件在列表中,或者在dialog中只显示了第一次的内容,第二次就开始报错.这个和前篇中的地图问题其实如出一辙. 解决办法,重加载,局部刷新. <el-form-item ...
- Power Tower
题目大意:给出一段长为 \(n\) 的序列 \(a_1,a_2,\cdots,a_n\) ,一个模数 \(m\) .每次询问给定 \(l,r\) 求 \(a_l^{{a_{l+1}^\cdots}^{ ...
- 18 ~ express ~ 前台分类导航展示 与 排序
一,前台分类导航展示 1,后台文件: /router/main.js router.get('/',(req,res,next)=>{ /** * 从数据库中读取分类信息 * rs是一个数组类 ...
- POJ-3258 (最小值最大化问题)
POJ - 3258 River Hopscotch Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & ...
- 201903-1 小中大 Java
思路: 中位数就是排序后中间的那个数.如果有偶数个数,就是中间两个数的平均值. 注意,这个平均值可能是整数,可能是小数,如果都是一样的处理,如果输出整数是3.0,而不是3,就有问题.所以需要分开处理. ...
- DP背包问题学习笔记及系列练习题
01 背包: 01背包:在M件物品中取出若干件物品放到背包中,每件物品对应的体积v1,v2,v3,....对应的价值为w1,w2,w3,,,,,每件物品最多拿一件. 和很多DP题一样,对于每一个物品, ...