欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

yzo sgyq dijkstra题

时间:2024-06-02 12:14 作者:admin 点击:
dijkstra算法背写 int dis[]; int vis[]; void dij(){ 初始值 while(){ 找最小 标记 更新-直到无需更新,跳出循环 } } //设置20*20的邻接矩阵 const int N=20; int t[N][N]; int dis[N];//dis[i]表示x-i的距离 int vis[

dijkstra算法背写


int dis[];

int vis[];

void dij(){

   初始值

   while(){

       找最小

       标记

       更新->直到无需更新,跳出循环

   }

}


//设置20*20的邻接矩阵

const int N=20;

int t[N][N];

int dis[N];//dis[i]表示x->i的距离

int vis[N];//vis[i]表示x->i的距离是否已经最小

void dij(int x){

   //找x到其它点的最短距离,

   memset(dis,0x3f,sizeof(dis));

   dis[x]=0;

   while(true){

       //找最小

       int k=0;

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

           if(dis[k]>t[x][i]){

               k=i;

           }

       }

       if(k==0) break;//直到无需更新,跳出循环

       //标记

       vis[k]=1;

       //更新

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

           //[x->k->i  x->i]

           if(vis[i]!=1&&dis[k]+t[k][i]<dis[i]){

               dis[i]=dis[k]+t[k][i];

           }

       }

   }

}


1341

#include<bits/stdc++.h>

using namespace std;

int n,m,a,b;

int t[105][105];

int d[105];//度

void dfs(int x){

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

       if(t[x][i]==1){

           t[x][i]=t[i][x]=0;

           dfs(i);

       }

   }

   cout<<x<<" ";

}

int main(){

   cin>>n>>m;

   for(int i=0;i<m;i++){

       cin>>a>>b;

       t[a][b]=t[b][a]=1;

       d[a]++;

       d[b]++;

   }

   int j=1;

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

       if(d[i]%2) j=i;

       if(d[i]==1) {j=i;break;}

   }

   dfs(j);

   return 0;

}


作业:1376



(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%