图
hebastast
这个作者很懒,什么都没留下…
展开
-
无向连通图中求割点集
割点就是去除这个点 以及和这个点相连接的边则会使连通分量不连通 。 最简单的算法是依次尝试所有点看去除该点和所对应的边 看一次dfs是否能遍历整个图 。不过时间复杂度较高。 下面的算法是基于 tarjan算法的 在算法中使用dfn来表示访问的时间(次序) low[a]来表示 a能够追溯到的祖先节点 (1) 当a节点是dfs树中的根节点时 如果a有两个或者两个以上的子树则说明a是割点 (原创 2015-07-26 17:59:41 · 1364 阅读 · 0 评论 -
130. Surrounded Regions
class Solution {private: void check(vector<vector<char>>&board,int i,int j,int row,int col) { if(board[i][j]=='O') { board[i][j]='1'; if(i>1)原创 2016-09-19 14:43:12 · 313 阅读 · 0 评论 -
200. Number of Islands
DFS解决class Solution {private: void DFS(vector<vector<char>>&grid,int x,int y)//把x,y这个位置置'0' 并dfs搜索他的四个方向 只要为1都变成0 { grid[x][y]='0'; if(x>0&&grid[x-1][y]=='1') DFS(原创 2016-10-12 19:47:13 · 287 阅读 · 0 评论 -
207. Course Schedule
class Solution {public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<vector<bool>> matrix(numCourses,vector<bool>(numCourses,false)); vector<int>原创 2016-10-15 10:22:06 · 274 阅读 · 0 评论 -
210. Course Schedule II
class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { vector<vector<int>> matrix(numCourses); vector<int> indegree(numCourses,0);原创 2016-10-15 15:22:22 · 304 阅读 · 0 评论 -
133. Clone Graph
class Solution {private: unordered_map<int,UndirectedGraphNode*> m; UndirectedGraphNode *clone(UndirectedGraphNode *node) { if(m.find(node->label)!=m.end())return m[node->label];原创 2016-09-30 16:08:00 · 346 阅读 · 0 评论 -
134. Gas Station
class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int start=gas.size()-1; int end=0; int sum=gas[start]-cost[start]; while(start原创 2016-10-04 10:56:56 · 265 阅读 · 0 评论 -
301. Remove Invalid Parentheses
class Solution {private: bool isValid(string s) { int count=0; for(int i=0;i<s.size();i++) { if(s[i]=='(') count++; else if(s[i]原创 2016-11-20 14:29:03 · 363 阅读 · 0 评论 -
310. Minimum Height Trees
class Solution {public: vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) { vector<int> ret; if(edges.size()==0)//只有一个点 没有边 { ret.push_back(0原创 2016-11-22 11:12:00 · 290 阅读 · 0 评论 -
329. Longest Increasing Path in a Matrix
class Solution {private: int pathHelper(int i,int j,vector<vector<int>> &matrix,vector<vector<int>> &cache) { if(cache[i][j]!=0) return cache[i][j]; int原创 2016-12-06 14:25:50 · 234 阅读 · 0 评论 -
332. Reconstruct Itinerary
class Solution {private: map<string,multiset<string>> targets; vector<string> route; void visit(string start) { while(targets[start].size())//当这个点有从此点出发的路径时就不断的dfs {原创 2016-12-07 12:15:00 · 314 阅读 · 0 评论 -
399. Evaluate Division
结题思路是: a/b=v 可以看成是一个又a点指向b点的有向图 边的权值为v 有了a指向b的边 就有 b指向a的边 大小为1/v 则求 c/v 的话就是在图中寻找一条由c指向v的边 将边上所有的权值相乘即可。public class Solution { public double[] calcEquation(String[][] equations, double[] va原创 2017-01-14 15:42:46 · 353 阅读 · 0 评论 -
417. Pacific Atlantic Water Flow
public class Solution { public List<int[]> pacificAtlantic(int[][] matrix) { List<int[]> ret=new ArrayList<int[]>(); int m=matrix.length; if(m==0) return ret;原创 2017-02-09 16:00:09 · 358 阅读 · 0 评论 -
127. Word Ladder 2
class Solution {public: int ladderLength(string beginWord, string endWord, unordered_set<string>& wordList) { int dist=2; unordered_set<string> head,tail,*phead,*ptail; hea原创 2016-09-19 10:39:03 · 468 阅读 · 0 评论 -
127. Word Ladder
class Solution {private: void nextWords(string word,unordered_set<string>& wordList,queue<string> &tovisit)//在wordList中寻找和word 只相差一个字母的单词添加到tovisit中 并从wordList 中删除word { wordList.erase原创 2016-09-18 10:38:15 · 315 阅读 · 0 评论 -
tarjan算法
如果两个顶点间存在路径使得a可到达b b也可到达a,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通有向图的极大强连通子图,称为强连通分量(strongly connected components) tarjan算法是基于dfs深度优先搜索的 算法中使用dfn和low数组 dfn数组来记录每个节点的访问时间 也就是访问原创 2015-07-25 20:09:41 · 455 阅读 · 0 评论 -
有向图中欧拉回路的求法
首先是欧拉回路的判断 在无向图中的欧拉回路 每个顶点的度都是偶数 且图为连通图 在判断连通性的时候可以使用并查集来判断图的连通性 也可以使用dfs或bfs来判断 不过运行速度会慢一点 在有向图中 欧拉回路 每个顶点的入度等于出度 且是连通的 这里的连通指的是弱连通 有向图的强连通性:任意两个顶点 a和b 既有a到b的路径又有b到a的路径 有向图的单向连通性: 任意两个原创 2015-07-28 14:12:21 · 2682 阅读 · 0 评论 -
拓扑排序
拓扑排序为对有向无环图的一种排序 ,它表示了事件发生的先后顺序 ,当在有向图中形成环后便不可拓扑排序 偏序 : 任意两个顶点要么是有序的即按先后顺序出现 要么是无序的 没有先后顺序 但是不可能出现矛盾 即出现环 全序 : 任意两个顶点都是有序的即按先后顺序出现的 是偏序的一种特殊情况 这里描述下拓扑排序的思路 :首先找到入度为0的点把它压入队列中 然后只要队列不为空 就取出其中的入度为原创 2015-07-29 10:52:58 · 566 阅读 · 0 评论 -
hdu 1878 欧拉回路
欧拉路径是指在图中每个边只遍历一遍 能够走完所有边 欧拉回路是欧拉路径且最后起点和终点重合 判断一个无向图中是否存在欧拉回路的充要条件是 每个顶点的度都是偶数且为连同图 一个有向图是否为欧拉图的充要条件为 每个顶点的出度等于入度 且为连通图 下面的题目在判断时很简单 只用了一次bfs就判断了图的连通性 题目链接 http://acm.hdu.edu.cn/showproblem.php?原创 2015-07-22 20:50:39 · 457 阅读 · 0 评论 -
uva 196 spreadsheet
//uva 196 spreadsheet//题目不是很难 但是对于输入数据的处理比较困难//题目大意为 网格中每个要么为整数 要么为公式//最后要把公式都替成数字#include <iostream>#include <string.h>#include <cstdio>using namespace std;typedef struct{ bool type;//标记是原创 2015-07-22 11:48:28 · 436 阅读 · 0 评论 -
无向图中欧拉回路的求法 poj1041
Poj 1041 John’s trip 就是无向图中欧拉回路的求法 首先判断是否存在欧拉回路 判断图的连通性利用并查集实现 然互判断每个点的度数是否为偶数 如果判断存在欧拉回路则利用dfs打印出欧拉回路#include <iostream>#include <algorithm>#include <vector>#include <stdlib.h>#include <stdio原创 2015-07-24 16:02:38 · 2113 阅读 · 1 评论 -
uva6195
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4206 此题就是求拓扑排序的个数 图没有拓扑排序则输出0 只有一种拓扑排序则输出1 有2种及以上的拓扑排序则输出2 下面是代码// topsort.cpp : Defines原创 2015-10-03 12:20:03 · 387 阅读 · 0 评论 -
nyu 的AI课的调度问题
nyu 的AI课的课后习题 http://cs.nyu.edu/courses/spring12/CSCI-GA.2560-001/prog1.html 题目的大意是输入n个task 每个task都有time(完成时间) value(完成产生的价值) task可能会有先驱 打个比方就是 要先完成task1 才能去进行task2 给定一个targetvalue 和deadline(最后完成时原创 2015-11-24 16:31:48 · 632 阅读 · 0 评论 -
HDU1863
http://acm.hdu.edu.cn/showproblem.php?pid=1863 题目很简单 就是使用kruskal算法 求最小生成树 的总权值 当然也可以使用prim算法来做 但是稍微复杂了一点 还要对输入的边和权值 用一个邻接矩阵或者邻接表来存储图 用kruskal的话 直接对边排序 然后判决边的两个顶点是否属于同一个集合 再来判断是否要加入这条边// kruskal.原创 2015-11-25 22:27:59 · 737 阅读 · 1 评论 -
Floyd最短路径算法
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。我们平时所见的Floyd算法的一般形式如下: void Floyd(){ int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++)原创 2015-07-10 15:41:14 · 790 阅读 · 0 评论 -
prim poj1789
题目的意思就是用一个长度为7的字符串来代表车的编号 有n个车 每两辆车之间的距离定义为 字符串中不相同的字符的个数 一辆车是从另外一辆车继承而来的 问怎么继承会使得总的继承距离最小 由于每两辆车之间都有距离 要取得最小的总距离的话就是最小生成树 转化成图论的问题了! http://poj.org/problem?id=1789#include <iostream>#define MAXN原创 2015-11-25 15:42:48 · 584 阅读 · 1 评论 -
dijkstra
题目的链接如下 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1311 我的想法是先使用dijkstra算法求出最短的路径 求出最短路径后 将整个最短路径中的边按从小到大进行排序 求出最短路径和要达到的值的差值,从大的边开始遍历 计算要改变最多几个边才能达到差值 就算出了结果!#include <iostream>#incl原创 2015-11-30 15:47:20 · 342 阅读 · 0 评论 -
417. Pacific Atlantic Water Flow dfs
public class Solution { public List<int[]> pacificAtlantic(int[][] matrix) { List<int[]> ret=new ArrayList<int[]>(); int m=matrix.length; if(m==0) return ret;原创 2017-02-09 19:05:23 · 302 阅读 · 0 评论