51nod 1445 变色DNA问题(Dijkstra)
来源:互联网 发布:mac打开csv文件要授权 编辑:程序博客网 时间:2024/05/29 00:29
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1445
题意:
注意:如果colormap[i][j]=’Y’的话,i到j需要i不到1~j-1,就是对于邻接矩阵而言,i到j的代价是第i行的第一个到第j-1个为Y的数量。
思路:知道了i到j的代价,就直接最短路就行了
好久没写过dijk了,小于号竟然写反
代码:
#include<bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;const int N = 55;vector<int> G[N];int n,dis[N],vis[N];struct node{ int v,w; node(int v=0,int w=0):v(v),w(w){} bool operator < (const node & p)const { return w > p.w; }};void Dijkstra(){ priority_queue<node> q; memset(vis,0,sizeof(vis)); memset(dis,0x3f,sizeof(dis)); dis[1] = 0; q.push(node(1,0)); while(!q.empty()) { node cur = q.top(); q.pop(); int u = cur.v; if(vis[u]) continue; vis[u] = 1; for(int i = 0;i < G[u].size();i++) { int v = G[u][i]; if(!vis[v] && dis[v] > dis[u]+ i) { dis[v] = dis[u] + i; q.push(node(v,dis[v])); } } }}int main(){ int t; char c; cin >> t; while(t--) { for(int i = 0;i < N;i++) G[i].clear(); scanf("%d",&n); getchar(); for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) { cin >> c; if(c == 'Y') G[i].push_back(j); } Dijkstra(); if(dis[n] == INF) printf("-1\n"); else printf("%d\n",dis[n]); } return 0;}
阅读全文
0 0
- 51nod 1445 变色DNA问题(Dijkstra)
- 51nod 1445 变色DNA
- 51NOD 1445 变色DNA
- 51nod 1445 变色DNA
- 51nod 1445 变色DNA
- 51Nod 1445 变色DNA
- 51nod 1445:变色DNA(最短路变形)
- 51nod 1445 变色DNA(最短路)
- 51nod 1445 变色DNA (最短路径变形)
- 51Nod-1445-变色DNA
- 51nod 1445:变色DNA 最短路变形
- 51nod 1445 变色DNA【最短路SPFA+思维】
- 51nod 1445:变色DNA 最短路变形
- 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)
- 变色的DNA-Dijkstra模板
- 1445 变色DNA(最短路)
- 变色DNA
- 51Nod 1459 迷宫游戏(dijkstra)
- 一位跨平台开发者的自白
- poj1066—Treasure Hunt(线段相交)
- PHP HTTP客户端-Guzzle原理解析
- 暑假 D2 T2 热点
- 信息系统开发与管理第二遍思维导图
- 51nod 1445 变色DNA问题(Dijkstra)
- linux中基本命令符的使用方式
- tomcat安装jenkins
- 时间序列数据的首选神经网络
- Java-A+B和C (15)
- maven build配置
- 关于 JAVA语言中修饰符的整理
- Protocol Buffers的简单介绍
- Glide框架的基本使用