专题四总结

来源:互联网 发布:夏老师c语言视频百度云 编辑:程序博客网 时间:2024/06/18 13:33


专题四总结

专题四图算法,到目前为止学习了并查集,最小生成树,最短路。

并查集找父节点:

int find(int x)

 {

 return p[x]==x?x:p[x]=find(p[x]);

 }

练习四1003

另一种:

int find(int a)

 {

 if(f[a]==a) return a;

 int tmp=f[a];

 f[a]=find(f[a]);

 nbo[a]+=nbo[tmp];   //记录父节点个数

 return f[a];

 }

练习四1022

最小生成树只会用kruscul算法,用这一个能做不少题了也就懒得学primer.

double kru()

 {

     double sum=0;

     for(int i=0;i<k;i++)

     {

         int c=find(b[i].s),d=find(b[i].e);

         if(c!=d)

         {

             p[c]=d;

             sum+=b[i].w;

         }

     }

     return sum;

 }

练习四1002

最短路会两种dijkstraFloyd

Dijstra:

int dijk()

 {

 for(int i=1;i<=n;i++)

 {

 dis[i]=map[1][i];

 }

 for(int i=1;i<=n;i++)

 {

 int mind=t,k;

 for(int j=1;j<=n;j++)

 {

 if(!vis[j]&&dis[j]<mind)

 {

 mind=dis[j];

 k=j;

 }

 }

 vis[k]=1;

 for(int j=1;j<=n;j++)

 {

 if(!vis[j]&&map[k][j]!=t&&dis[j]>dis[k]+

 map[k][j])

 dis[j]=dis[k]+map[k][j];

 }

 }

 return dis[n];

 }

练习四1009

这个专题赶上了期末考试复习,考完试再补上,要补的东西不少。

0 0