算法之路(一)

写在前面:

好久没有复习算法这部分的知识了,以前也养成了不好的习惯,眼高手低,理解了算法的原理,不怎么去写伪代码,也很少真的去编译一下代码。以后要改正这个不好的习惯。从今天开始,把以前学习过的算法编译一遍,当做复习。

注:我编译代码的环境有两种:1、ubuntu14.04, g++4.8.4  

   2、VS2015

代码基本上都是用C++写的,顺便改进下C++的编程习惯。有诸多不足,j敬请原谅,欢迎留言指正,大家共同进步。谢谢~


第一遍就从图搜索开始吧,DFS的递归实现,下一篇我将写DFS的非递归实现。

DFS的原理网上太多了,我就不去介绍了,相信都懂,直接上代码:


//Graph.h

#include <list>

using namespace std;

class Graph
{
int count;
list<int>* adj;
void DFSUtil(int v, bool visited[]);

public:
void addEdge(int v, int w);
void DFS(int v);
Graph(int count);
};


// Graph.cpp

#include <iostream>
#include <list>
#include <stdlib.h>
#include "Graph.h"
#pragma GCC diagnostic error "-std=c++11"
using namespace std;

Graph::Graph(int count)
{
this->count = count;
adj = new list<int>[count];
}

void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
}

void Graph::DFSUtil(int v, bool visited[])
{
visited[v] = true;
cout << v << " ";
for (int w:adj[v])
{
if (!visited[w])
DFSUtil(w, visited);
}
}

void Graph::DFS(int v)
{
bool *visited = new bool[count];
for (int i = 0; i < count; ++i)
visited[i] = false;
DFSUtil(v, visited);
}

// main.cpp   测试代码

#include <iostream>
#include "Graph.h"

using namespace std;

int main()
{
Graph g(8);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 0);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 0);
g.addEdge(2, 5);
g.addEdge(2, 6);
g.addEdge(3, 1);
g.addEdge(3, 7);
g.addEdge(4, 1);
g.addEdge(4, 7);
g.addEdge(5, 2);
g.addEdge(5, 7);
g.addEdge(6, 2);
g.addEdge(6, 7);
g.addEdge(7, 3);
g.addEdge(7, 4);
g.addEdge(7, 5);
g.addEdge(7, 6);
cout << "DFS from 2 : " << endl;
g.DFS(0);
cout << endl;
return 0;
}

下面是运行过程和运行结果(我就直接截图了~):



俗话说,孰能生巧,要想好好掌握一个算法,熟练度必不可少。参加ACM的每个人都把这些基础代码敲上个几十遍,把屏幕关了还能敲出来,运行成功。哈哈~ 我也要多去练习练习啊~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值