我想从书籍竞争性编程实现邻接列表图形表示1.实现使用V顶点的向量并且对于每个顶点v,另一个包含与vI am连接的(相邻顶点和它的边缘权重)对的向量有问题需要输入此图表并显示输出.
在书中,他们做了这样的宣言:
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int, int> ii;
typedef vector<ii> vii;
vector <vii> AdjList;
Run Code Online (Sandbox Code Playgroud)
我应该如何将以下图形的输入作为邻接列表并输出它的邻接列表表示?假设边缘的每个成本是10.
我正在阅读《竞争性编程 1》一书中的 Dijkstra 算法。在实现程序中,他们写了这样的内容:
#define pair<int,int> ii;
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)
如果我们将整数 s 作为源,则实现显示像这样推送对 (cost,source)(节点编号从 1 到 n):
pq.push(ii(0,s)) ;
Run Code Online (Sandbox Code Playgroud)
我的问题是我们正在将一对成本和节点放入优先级队列中。但是其他两个参数(即向量和更大)在priority_queue声明中做什么呢?
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)
我尝试声明类似的内容:
priority_queue< ii > pq ;
Run Code Online (Sandbox Code Playgroud)
并且代码有效(在我尝试过的那些测试用例上)。
谁能告诉我该声明的含义:
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)
上面的声明和上面的声明有什么区别
priority_queue< ii > pq ;
Run Code Online (Sandbox Code Playgroud)
宣言 ?
我在跟随代码行时遇到错误.我试图将向量p的元素p [0],p [1],p [2],p [3]传递给函数距离.
typedef struct {
long long x,y;
} point;
long long distance (point A,point B)
{
int d1 = A.x - B.x ;
int d2 = A.y - B.y ;
long long d = d1 * d1 + d2 *d2 ;
return d ;
}
//in main function I declared vector <point> p and took input and then,
x1 = distance (p[0],p[1]) ; // this line is causing error
x2 = distance (p[1],p[2]) ; // this …Run Code Online (Sandbox Code Playgroud)