九度 1545:奇怪的连通图
生活随笔
收集整理的這篇文章主要介紹了
九度 1545:奇怪的连通图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
?
總結
1. 用 BFS 實現 Dijkstra. 要點是, visited 后標記, 把某個點從優先隊列取出后再標記
?
代碼 未通過九度測試 RE
/** source.cpp** Created on: 2014-4-4* Author: vincent*/#include <iostream> #include <stdio.h> #include <queue> #include <vector> #include <memory.h> using namespace std;class GraphNode { public:int index;int dis;GraphNode(int _index, int _dis):index(_index), dis(_dis) {}GraphNode() {GraphNode(0, 0);} };class QueueNode { public:int index;int dis;QueueNode(int _index, int _dis):index(_index), dis(_dis) {}QueueNode() {QueueNode(0, 0);}bool operator <(const QueueNode &other) const {return this->dis > other.dis;} }; const int INF = 0X3F3F3F3F; vector<GraphNode> graph[10100]; bool visited[10100];int main() {int vertex, edge;freopen("input.txt", "r", stdin);while(scanf("%d%d", &vertex, &edge) != EOF) {for(int i = 0; i <= vertex; i++)graph[i].clear();memset(visited, 0, sizeof(visited));int m, n, k;for(int i = 0; i < edge; i ++) {scanf("%d%d%d", &m, &n, &k);graph[m].push_back(GraphNode(n, k));graph[n].push_back(GraphNode(m, k));}priority_queue<QueueNode> record;record.push(QueueNode(1, 0));visited[1] = true;int minK = INF;while(!record.empty()) {QueueNode qNode = record.top();record.pop();if(qNode.index == vertex) {minK = qNode.dis;visited[qNode.index] = 1;break;}int index = qNode.index;for(size_t i = 0; i < graph[index].size(); i ++) {int j = graph[index][i].index;if(visited[j])continue;record.push(QueueNode(j, max(qNode.dis, graph[index][i].dis)));}}if(visited[vertex] == 0) {printf("-1\n");}else {printf("%d\n", minK);}}return 0; }
SPFA Solution WA
#include <iostream> #include <stdio.h> #include <memory.h> #include <algorithm> #include <vector> #include <map> #include <set> #include <string> #include <deque> #include <cstring> #define MIN(x,y) (x)<(y)?(x):(y) using namespace std;class Node { public:int index;int cost;Node() {index = cost = -1;}Node(int _index, int _cost):index(_index), cost(_cost) {} };vector<Node> graph[10010]; int dist[10010];int spfa(int m) {deque<int> record;memset(dist, 0x3f, sizeof(dist));set<int> visited;record.push_back(1);visited.insert(1);dist[1] = 0;while(!record.empty()) {int fat = record.front();record.pop_front();for(int i = 0; i < graph[fat].size(); i ++) {Node child = graph[fat][i];int child_index = child.index;int child_cost = child.cost;if(max(dist[fat],child_cost) < dist[child_index]) {dist[child_index] = max(dist[fat], child_cost);if(visited.count(child_index)) continue;record.push_back(child_index);visited.insert(child_index);}}}if(dist[m] == 0x3f3f3f3f)return -1;return dist[m];}int main() {freopen("C:\\Users\\vincent\\Dropbox\\workplacce\\joj\\test.txt", "r", stdin);int m, n;while(scanf("%d%d", &m, &n) != EOF) {for(int i = 1; i <= m; i ++) {graph[i].clear();}int from, to, cost;for(int i = 0; i < n; i ++) {scanf("%d%d%d", &from, &to, &cost);graph[from].push_back(Node(to, cost));graph[to].push_back(Node(from, cost));}int res = spfa(m);printf("%d\n", res);}return 0; }
轉載于:https://www.cnblogs.com/zhouzhuo/p/3645826.html
總結
以上是生活随笔為你收集整理的九度 1545:奇怪的连通图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 切切切切切切切
- 下一篇: tomcat配置用户数据