图论笔记√

首先最简单的存图方式:邻接矩阵

mp[i][j]表示从i->j有一条边权为mp[i][j]的边//如果是无限大的话就是算作没有边

e.g.http://218.5.5.242:9018/JudgeOnline/problem.php?id=1144

这里mp[xx][yy]=(xx和yy的距离)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define inf 2000022800.00
using namespace std;
int n,m;
double x[105],y[105];
double a[105][105];
double mp[105][105];

double MIN(double x,double y)
{
    if(x>y)return y;
    else return x;
}
int main()
{
    scanf("%d",&n);
//    memset(mp,127/3,sizeof(mp));

    for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)mp[i][j]=inf;
    for(int i=1;i<=n;++i)
    {
        mp[i][i]=0;
        scanf("%lf%lf",&x[i],&y[i]);
    }
    cin>>m;
    for(int i=1;i<=m;++i)
    {
        int xx,yy;
        scanf("%d%d",&xx,&yy);
        mp[xx][yy]=sqrt((x[xx]-x[yy])*(x[xx]-x[yy])+(y[xx]-y[yy])*(y[xx]-y[yy]));
    }
    int xx,yy;
    cin>>xx>>yy;
    for(int k=1;k<=n;++k)
    {
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=n;++j)
            {
                mp[i][j]=MIN(mp[i][j],mp[i][k]+mp[k][j]);
            }
        }
    }
    printf("%.2lf",mp[xx][yy]);
    puts("");

    return 0;
}


时间: 2024-08-06 08:36:28

图论笔记√的相关文章

[图论笔记]基本概念

什么是图 定义 一个图是由一个顶点集.一个边集和一个关系构成的三元组,其中的关系使得每一条边与两个顶点(不一定是不同的顶点)相关联,并将这两个顶点称为这条边的端点. 一个圈是两个端点相同的一条边.重边是具有同一对端点的多条边. 简单图是不含圈和重边的图. 顶点集和边集是空集的图称为空图. 图模型 一个简单图的补图也是一个简单图,其顶点集为,且当且仅当. 团是图中两两相邻的顶点构成的集合.独立集(或稳定集)是图中由两两互不相邻的顶点构成的集合. ?

2017清北学堂集训笔记——图论

我们进入一个新的模块——图论! emmmmm这个专题更出来可能有点慢别介意,原因是要划的图和要给代码加的注释比较多,更重要的就是...这几个晚上我在追剧!!我们的少年时代超级超级超级好看,剧情很燃啊!!咳咳,好吧下面回归正题. 一.图的存储: 1.邻接矩阵: 假设有n个节点,建立一个n×n的矩阵,第i号节点能到达第j号节点就将[i][j]标记为1(有权值标记为权值), 样例如下图: 1 /*无向图,无权值*/ 2 int a[MAXN][MAXN];//邻接矩阵 3 int x,y;//两座城市

算法笔记_149:图论之桥的应用(Java)

目录 1 问题描述 2 解决方案   1 问题描述 1310 One-way traffic In a certain town there are n intersections connected by two- and one-way streets. The town is very modern so a lot of streets run through tunnels or viaducts. Of course it is possible to travel between

C++ Primer 学习笔记_66_面向对象编程 --定义基类和派生类[续]

算法旨在用尽可能简单的思路解决问题,理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时不妨从例子入手,通过一个简单的例子,并编程实现,这个过程其实就可以理解清楚算法里的最重要的思想,之后扩展,对算法的引理或者更复杂的情况,对算法进行改进.最后,再考虑时间和空间复杂度的问题. 了解这个算法是源于在Network Alignment问题中,图论算法用得比较多,而对于alignment,特别是pairwise alignment, 又经常遇到maxim

自然语言处理一些读书笔记和自己的思考。

在知乎上搜索相关问题,有人推荐<数学之美>,之前粗略看过一次,这次想重新看一下并且做个读书笔记.下面是关于自然语言理解方面的一些读书笔记和自己的思考. 一. 自然语言处理历史: 自然语言处理最初发展的20多年里,相关科学家都极力通过电脑模拟人脑,试图用这种方式来处理人类语言,但是这种方式被证明是行不通的,成功几乎为零.NLP发展的第二阶段是70年代之后,科学家们终于找到了基于数学模型和统计的方法. 第一阶段的时候,学术界对人工智能和自然语言理解的普遍认识是:要让机器完成翻译或者语音识别等等,必

猪猪的机器学习笔记(八)聚类

聚类 作者:樱花猪   摘要: 本文为七月算法(julyedu.com)12月机器学习第八次次课在线笔记.聚类算法是一种常见的无监督的学习方法,概念简单在图像.机器学习中都有应用.目前有许多聚类方法,本次课程将一一探讨各种各样的聚类算法. 引言: 聚类算法在很早就接触过,简单的说就是通过对于某些相关性的测量来将样本分成不同的类别,聚类算法除了在机器学习中有所应用在图像分割时也是一种非常好的思路.本次课程从我们熟悉的K-means聚类开始讲起,介绍了层次聚类.密度聚类.谱聚类等方法.文章的最后还介

面试高级算法梳理笔记

面试高级算法梳理笔记 1.1 说明 本篇为<挑战程序设计竞赛(第2版)>读书笔记系列,旨在: 梳理算法逻辑 探索优化思路 深入代码细节 1.2 目录 原文首发于个人博客Jennica.Space,按算法难度划分为初中高三个级别,详细目录及链接如下: 初级篇 穷竭搜索 贪心 动态规划 数据结构 图论 数论 中级篇 二分搜索 常用技巧 数据结构(二) 动态规划(二) 网络流 计算几何 高级篇 数论(二) 博弈论 图论(二) 常用技巧(二) 智慧搜索 分治 字符串 1.3 题解 配套习题及详解同步发

Spark GraphX学习笔记

概述 GraphX是 Spark中用于图(如Web-Graphs and Social Networks)和图并行计算(如 PageRank and Collaborative Filtering)的API,可以认为是GraphLab(C++)和Pregel(C++)在Spark(Scala)上的重写及优化,跟其他分布式 图计算框架相比,GraphX最大的贡献是,在Spark之上提供一站式数据解决方案,可以方便且高效地完成图计算的一整套流水作业. Graphx是Spark生态中的非常重要的组件,

43. 蛤蟆的数据结构笔记之四十三最短路径之迪杰斯特拉(Dijkstra )算法

43. 蛤蟆的数据结构笔记之四十三最短路径之迪杰斯特拉(Dijkstra )算法 本篇名言:"辛勤的蜜蜂永没有时间悲哀.--布莱克" 这次来看下Dijkstra )算法.还是老方法,先原理,后实现.代码来自网络. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47046031 1.  最短路径 最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径. 管道铺设.线路安排