dijkstra+dfs模板

来源:互联网 发布:论持久战的影响知乎 编辑:程序博客网 时间:2024/06/03 14:52

算法笔记P384.甲级1018.


void dijkstra(int s){int i,newp=s;mark[s]=1;dis[s]=0;while(1){for(i=0;i<=n;i++){if(mark[i]==0&&dismap[newp][i]<inf){if(dis[i]>dis[newp]+dismap[newp][i]){pre[i].clear();pre[i].push_back(newp);dis[i]=dis[newp]+dismap[newp][i];}else if(dis[i]==dis[newp]+dismap[newp][i]){pre[i].push_back(newp);}}}int min=inf;for(i=0;i<=n;i++){if(mark[i]==0&&dis[i]<inf){if(dis[i]<min){min=dis[i];newp=i;}}}mark[newp]=1;if(min==inf||newp==sp){break;}}}

int optvalue;vector<int>pre[max];vector<int>path,temppath;void dfs(int s){if(s==start){temppath.push_back(s);int value;计算路径temppath上的value值;if(value优于optvalue){optvalue=value;path=temppath;} temppath.pop_back();return;}temppath.push_back(s);int i;for(i=0;i<pre[v].size();i++){dfs(pre[v][i]);}temppath.pop_back();}

//边权之和int value =0,i;for(i=temppath.size()-1;i>0;i--){//i>0int now=temppath[i];int next=temppath[i-1];value=value+v[now][next];}

//点权之和int value =0,i;for(i=temppath.size()-1;i>=0;i--){//i>=0int now=temppath[i];value=value+w[now];}


0 0
原创粉丝点击