• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

邻接矩阵写法:

1 #包含位/标准位

2使用命名空间标准

3 const int INF=0x 3 F3 F3 F3 f;

4 const int maxn=1e5 10

5 int vis[maxn],dist[maxn];

6 int n,m,a,b;

七结构节点

8 {

9 int dis,to;

10布尔运算符(常量节点x)常量

11 {

12返回disx

13 }

14 };

15矢量节点w[maxn];

16虚空迪克斯特拉()

17 {

18 memset(vis,0,sizeof(vis));

19 memset(dist,inf,sizeof(dist));

20 dist[0]=0;

21 vis[0]=1;

22 for(int I=0;iw[0].size();我)

23 {

24 int to=w[0].到;

25 dist[to]=w[0].阴间

26 }

27 int minx

28 for(int I=0;在;我)

29 {

30 minx=n;

31 for(int j=0;jn;j)

32 {

33如果(!vis[j]dist[j]dist[minx])

34 {

35 minx=j;

36 }

37 }

38 vis[minx]=1;

39 for(int k=0;千瓦[疯丫头]。size();k)

40 {

41 int to=w[minx][k].到;

42如果(!距离,距离,距离,距离dis)

43 {

44 dist[to]=dist[minx]w[minx][k].阴间

45 }

46 }

47 }

48 }

49 int main()

50 {

51 cinnm

现在52个节点;

53 for(int I=0;im;我)

54 {

55 cinabnow.dis

现在56了。to=b;

57瓦.推回(现在);

现在58了。to=a;

59瓦.推回(现在);

60 }

61迪杰斯特拉();

62 for(int I=0;在;我)

63 {

64 printf('%d%c ',dist,i==n-1?\ n ' : ' ');

65 }

66返回0;

67 }

邻接表写法(未优化):

1 #包含位/标准位

2使用命名空间标准

3 const int INF=0x 3 F3 F3 F3 f;

4 const int maxn=200050

5 int head[maxn],dis[maxn],book[maxn];

6 int n,m,u,v,w,s,num=0;

七结构节点

8 {

9 int to,next,dis

10布尔运算符(常量节点x)常量

11 {

12返回disx

13 }

14 };

15节点边缘[maxn];

16 void ljb(int form,int to,int w)

17 {

18号

19边[数字]。next=head[form];

20边[数字]。dis=w;

21边[数字]。到=到

22头[形式]=数字;

23 }

24虚空迪克斯特拉()

25 {

26填充(dis,dis 5000,INF);

27 int tmp=s;

28 dis=0;

29 while(!书[tmp])

30 {

31本书[tmp]=1;

32 for(int I=head[tmp];我!=-1;i=edge.下一个)

33 {

34如果(!书[缘[我]。疾病,疾病.边缘,边缘dis)

35 {

三十六分之一英寸.边缘,边缘.阴间

37 }

38 }

39 int minn=inf

40 for(int I=1;I=n;我)

41 {

42如果(!书籍,书籍

43 {

44 Minn=dis

45 tmp=I;

46 }

47 }

48 }

49 }

50 int main()

51 {

52填充(头,头5000,-1);

53个cinnms

54 for(int I=0;im;我)

55 {

56 cinu ww

57 ljb(u,v,w);

58 }

59 Dijkstra();

60 for(int I=1;I=n;我)

61 {

62如果(在)

63 cout dis' ';

64其他

65库蒂斯

66 }

67返回0;

68 }

邻接表,优先队列堆优化:

例题:

P3371模板】单源最短路径(弱化版) - 洛谷|计算机科学教育新生态(luogu.com.cn)

#includebits/stdc .h

使用命名空间标准

const int INF=1e 31-1;

const int maxn=1000001

int head[maxn],dis[maxn],vis[maxn];

int m,n,s,u,v,w,num=0;

priority_queue pairint,int q;//第一维是阴间的相反数,把大堆转化为小堆

结构节点

{

int to,dis,next

};

节点边缘[maxn];

void add(int form,int to,int w)

{

数字

边缘[数字]。next=head[form];

边缘[数字]。dis=w;

边缘[数字]。到=到

head[form]=num;

}

void dijkstra()

{

fill(dis,dis 500005,INF);

dis=0;

q.push(make_pair(0,s));

而(!q.empty())

{

int x=q.top().第二;

q . pop();

如果(vis[x])

继续;

vis[x]=1;

for(int I=head[x];我!=0;i=edge.下一个)

{

int to=edge.到;

如果(!相对于边缘dis)

{

边缘,边缘.阴间

q.push(make_pair(-dis[to],to));

}

}

}

}

int main()

{

cinnms

for(int I=0;im;我)

{

cinu ww

add(u,v,w);

//add(v,u,w);无向图

}

Dijkstra();

for(int I=1;I=n;我)

{

如果(在)

cout dis" ";

其他

cout dis

}

返回0;

}

mfqcecxrgt03217.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now