求解释C++代码,本人没看懂,主要是队列容器什么的
#include<cstring>#include<cstdio>#include<vector>#include<iterator>#include<queue>usi...
#include<cstring>
#include<cstdio>
#include<vector>
#include<iterator>
#include<queue>
using namespace std;
const int MAX=1010;
int len[MAX];
bool visited[MAX];
int n,m,p,q,a,b,d;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int> > > dq;
struct Node{
Node(int num,int dis):num(num),dis(dis){}
int num,dis; };
void Dijkstra(vector<vector<Node> >& g) {
pair<int,int> tp;
while(!dq.empty()){
tp=dq.top();dq.pop();
if(tp.second==q-1) return;
if(tp.first!=len[tp.second]) continue;
visited[tp.second]=true;
for(int j=0;j!=g[tp.second].size();++j)
if(tp.first+g[tp.second][j].dis<len[g[tp.second][j].num]){
len[g[tp.second][j].num]=tp.first+g[tp.second][j].dis;
dq.push(make_pair(len[g[tp.second][j].num],g[tp.second][j].num));} } }
int main(){
int t;
cin>>t;
while(t--){
while(!dq.empty()) dq.pop();
cin>>n>>m>>p>>q;
vector<vector<Node> > g(m);
for(int i=0;i!=g.size();i++) len[i]=INT_MAX;
for(int i=0;i!=n;i++){
cin>>a;
len[a-1]=0;
dq.push(make_pair(0,a-1)); }
for(int i=0;i!=p;++i){
scanf("%d%d%d",&a,&b,&d);
g[a-1].push_back(Node(b-1,d));
g[b-1].push_back(Node(a-1,d)); }
Dijkstra(g);
cout<<len[q-1]<<endl;
memset(len,0,sizeof(len));
memset(visited,0,sizeof(visited)); } }
1、priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int> > > dq;2、struct Node{Node(int num,int dis):num(num),dis(dis){}3、void Dijkstra(vector<vector<Node> >& g) {pair<int,int>tp;4、vector<vector<Node> > g(m); 展开
#include<cstdio>
#include<vector>
#include<iterator>
#include<queue>
using namespace std;
const int MAX=1010;
int len[MAX];
bool visited[MAX];
int n,m,p,q,a,b,d;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int> > > dq;
struct Node{
Node(int num,int dis):num(num),dis(dis){}
int num,dis; };
void Dijkstra(vector<vector<Node> >& g) {
pair<int,int> tp;
while(!dq.empty()){
tp=dq.top();dq.pop();
if(tp.second==q-1) return;
if(tp.first!=len[tp.second]) continue;
visited[tp.second]=true;
for(int j=0;j!=g[tp.second].size();++j)
if(tp.first+g[tp.second][j].dis<len[g[tp.second][j].num]){
len[g[tp.second][j].num]=tp.first+g[tp.second][j].dis;
dq.push(make_pair(len[g[tp.second][j].num],g[tp.second][j].num));} } }
int main(){
int t;
cin>>t;
while(t--){
while(!dq.empty()) dq.pop();
cin>>n>>m>>p>>q;
vector<vector<Node> > g(m);
for(int i=0;i!=g.size();i++) len[i]=INT_MAX;
for(int i=0;i!=n;i++){
cin>>a;
len[a-1]=0;
dq.push(make_pair(0,a-1)); }
for(int i=0;i!=p;++i){
scanf("%d%d%d",&a,&b,&d);
g[a-1].push_back(Node(b-1,d));
g[b-1].push_back(Node(a-1,d)); }
Dijkstra(g);
cout<<len[q-1]<<endl;
memset(len,0,sizeof(len));
memset(visited,0,sizeof(visited)); } }
1、priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int> > > dq;2、struct Node{Node(int num,int dis):num(num),dis(dis){}3、void Dijkstra(vector<vector<Node> >& g) {pair<int,int>tp;4、vector<vector<Node> > g(m); 展开
2个回答
展开全部
就是用迪杰斯特拉算法求最短路径
更多追问追答
追问
我补充问题了,麻烦看一下,解释一下
追答
你可以找c语言的迪杰斯特拉算法
然后对比看看和这个用容器实现的有什么区别 就知道了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
2017-02-07
展开全部
你想解释啥内,麻烦把你的问题描述清楚,你不是要别人把你这一大段代码一句一句的解释一下把。
追问
我补充问题了,麻烦看一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询