标签:node register temp int Dijskra 迪杰 num 数据结构 dis
题目链接:https://www.dotcpp.com/oj/problem1708.html
今天打算打一下午的最短路,刷上十道题最短路就算完结了,开刷
其实这道题挺迷的,这个题最大的坑点就是不能双向存图,我也不知道为什么不能存双边,但是存了双边就过不了,先不探究了,先刷题;
然后就是常规的djkstra了;
Talk is cheap. Show me the code.
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int num=100; 4 const int INF=0x3f3f3f3f; 5 int n; 6 int s; 7 struct edge 8 { 9 int from; 10 int to; 11 int w; 12 edge(int a,int b,int c) 13 { 14 from=a; 15 to=b; 16 w=c; 17 } 18 }; 19 vector<edge>e[num]; 20 struct node 21 { 22 int id; 23 int d; 24 node(int b,int c) 25 { 26 id=b; 27 d=c; 28 } 29 bool operator<(const node &a)const 30 { 31 return d>a.d; 32 } 33 }; 34 int dis[num]; 35 void dijkstra() 36 { 37 bool done[num]; 38 for(register int i=0;i<n;i++) 39 { 40 dis[i]=INF; 41 done[i]=false; 42 } 43 dis[s]=0; 44 priority_queue<node>q; 45 q.push(node(s,dis[s])); 46 while(!q.empty()) 47 { 48 node u=q.top(); 49 q.pop(); 50 if(done[u.id]) 51 continue; 52 done[u.id]=true; 53 for(register int i=0;i<e[u.id].size();i++) 54 { 55 edge y=e[u.id][i]; 56 if(done[y.to]) 57 continue; 58 if(dis[y.to]>y.w+u.d) 59 { 60 dis[y.to]=y.w+u.d; 61 q.push(node(y.to,dis[y.to])); 62 } 63 } 64 } 65 // printf("%d ",dis[n]); 66 } 67 int main() 68 { 69 std::ios::sync_with_stdio(false); 70 cin.tie(0); 71 cout.tie(0); 72 cin>>n>>s; 73 for(register int i=0;i<n;i++) 74 { 75 for(register int j=0;j<n;j++) 76 { 77 int temp; 78 cin>>temp; 79 if(temp) 80 { 81 e[i].push_back(edge(i,j,temp)); 82 //e[j].push_back(edge(j,i,temp)); //不要存双边 83 } 84 } 85 } 86 dijkstra(); 87 for(register int i = 0; i < n; i++){ 88 if(i!=s){//跳过那个起点 89 if(dis[i] == INF){ 90 printf("-1 "); 91 }else{ 92 printf("%d ", dis[i]); 93 } 94 } 95 } 96 return 0; 97 }
标签:node,register,temp,int,Dijskra,迪杰,num,数据结构,dis 来源: https://www.cnblogs.com/LQS-blog/p/16215886.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。