Stanford 算法 part II:第一周编程题
来源:互联网 发布:js定义map 编辑:程序博客网 时间:2024/05/14 07:16
本周编程题没写,故转载别人的答案以作记录
答案转自:http://blog.csdn.net/zhaoxinfan/article/details/9713517
(比我写的好太多了。。。)
#include <iostream> #include <fstream> #include <cstdio> #include <vector> #define N 875714 using namespace std; struct node{ bool visited; int leader; int finish; vector<int> linkedVertices; vector<int> rLinkedVertices; }; struct node G[N+1]; struct node newG[N+1];//存放修改后的图,下面有问题要问到这个 int t=0; int s=0; void dfs(node G[], int i, bool reverse){ G[i].visited=true; G[i].leader=s; vector<int> next; if (reverse) next= G[i].rLinkedVertices; else next= G[i].linkedVertices; for(int j=0; j<next.size(); j++){ if(!G[next[j]].visited) { dfs(G, next[j], reverse); } } t++; G[i].finish=t; } void dfs_loop(node G[], bool reverse){ t=0; s=0; for(int i=N;i>0;--i){ if (!G[i].visited){ s=i; dfs(G,i,reverse); } } } int main(){ for(int i=1;i<=N;++i){ G[i].visited=false; } FILE* fp=freopen("SCC.txt","r",stdin); int head, tail; while (scanf("%d %d", &head, &tail) > 0) { G[head].linkedVertices.push_back(tail); G[tail].rLinkedVertices.push_back(head); } fclose(fp); dfs_loop(G, true);//FIRST LOOP for(int i=1;i<=N;++i){ newG[i].visited=false; newG[i].finish=0; newG[i].leader=0; vector<int> temp; for(int j=0; j< G[i].linkedVertices.size(); j++){ temp.push_back(G[G[i].linkedVertices[j]].finish); } newG[G[i].finish].linkedVertices=temp; } dfs_loop(newG,false);//SECOND LOOP ofstream ofs("stat.txt", ofstream::out); for (int k=1;k<=N;k++) ofs<< newG[k].leader<<endl; ofs.close(); return 0; }
阅读全文
0 0
- Stanford 算法 part II:第一周编程题
- Stanford 算法 part I:第四周编程题
- Stanford 算法 part I:第二周编程题
- Stanford 算法 part I:第三周编程题
- Stanford公开课之算法:设计与分析——II.渐进式分析(第一周)
- 第一周编程题
- Stanford公开课之算法:设计与分析——(第一周) Programming Question-1
- Algorithm, Part I Princeton University 公开课第一周 Union-Find算法
- 第一周编程题-逆序的三位数
- MOOC C语言程序设计 第一周编程题
- 第一周编程题_分数
- Java程序语言进阶 ---- 第一周编程题
- C++算法题_第一周
- 第一周LeetCode算法题之一
- 第一周LeetCode算法题之二
- 编程第一周小结
- 第一周编程作业
- Coursera_Algorithms,Part I,第一周笔记
- 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
- Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是
- 心情日志2017.11.28
- 分答项目_知识点:$_GPC[]获取客户端传递的js数组数据
- SpringCloud(第 043 篇)链接Mysql
- Stanford 算法 part II:第一周编程题
- springmvc定时消息推送怎么做
- ScrollView与ListView或者RecycleView嵌套
- 【更新】Chromium引擎集成控件DotNetBrowser V1.13更新发布 | 全新协议处理程序
- Python_测试函数
- centos系统删除mysql服务
- 1046. 划拳(15)--Python
- 实验三 linux文件管理
- CodeForces 895B XK Segments