本文链接:http://www.cnblogs.com/Ash-ly/p/5399057.html
采用链式前向星存图的DFS:
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; typedef long long LL; const int maxN = 100 + 3; const int maxM = 1000 + 3; int head[maxN]; int visited[maxN]; int N, M; struct EdgeNode { int to; int w; int next; }; EdgeNode Edges[maxM]; void DFS(int x) { visited[x] = 1; //标记当前节点已被访问 for(int i = head[x]; i != -1; i = Edges[i].next) { //对于每个未被访问的相邻节点,调用DFS,遍历结束后、尝试其他支路 if( !visited[Edges[i].to] ) DFS(Edges[i].to); } } int main() { freopen("input.txt", "r", stdin); memset(head, -1, sizeof(head)); cin >> N >> M; for(int i = 1; i <= M; i++) { int x, y ,z; cin >> x >> y >> z; Edges[i].to = y; Edges[i].w = z; Edges[i].next = head[x]; head[x] = i; } memset(visited, 0, sizeof(visited)); DFS(1); return 0; }