

题目
深度优先
解决代码及点评
// 深度优先.cpp : 定义控制台应用程序的入口点。
//
// 图的邻接表表示.cpp : 定义控制台应用程序的入口点。
//#include <iostream>
#include <stack>
#include <queue>
#include <array>
using namespace std;template<class T>
class EdgeNode
{
public:T adjvex;EdgeNode *pnext;
};template<class T>
class Graph
{
public:Graph();~Graph();void CreatALGraph();void BFSTraverse();void DFSTraverse();
private:EdgeNode<T> *adjlist[100]; //数组int n; //顶点数int e; //边数
};template<class T>
Graph<T>::Graph()
{//adjlist = new EdgeNode<T>;
}template<class T>
Graph<T>::~Graph()
{}template<class T>
void Graph<T>::DFSTraverse()
{stack <EdgeNode<T>> s;int a[100]= {0};s.push(*adjlist[0]);int i=1;int flag=0;while(!s.empty()&&flag==0) //{EdgeNode<T> *node ;node = &s.top();cout<<"->"<<node->adjvex;if (!s.empty()){s.pop();}while(node!=NULL){int flag = 0;for (int i=0;i<n;i++){if (adjlist[i]->adjvex==node->adjvex&&a[i]==0){//cout<<" "<<adjlist[i]->adjvex;s.push(*adjlist[i]);a[i]=1;}}node=node->pnext;}}}template<class T>
void Graph<T>::BFSTraverse()
{queue<EdgeNode<T>> q;int a[100]= {0};q.push(*adjlist[0]);int i=1;int flag=0;while(!q.empty()&&flag==0) //该点出队,它的下一层,即邻接结点入队(未遍历过的邻接结点),直到所有点都被遍历到{EdgeNode<T> *node ;node = &q.front(); //为啥是&cout<<"->"<<node->adjvex;node = node->pnext;while(node!=NULL){int flag = 0;for (int i=0;i<n;i++){if (adjlist[i]->adjvex==node->adjvex&&a[i]==0){//cout<<" "<<adjlist[i]->adjvex;q.push(*adjlist[i]);a[i]=1;}}node=node->pnext;}if (!q.empty()){q.pop();}//for ()//{//}///./q.push(adjlist[i]);}flag=1;for (int i=0;i<n;i++){if (a[i]==0){flag=0;}}}
template<class T>
void Graph<T>::CreatALGraph()
{//EdgeNode<T> *adjlist2 = adjlist;int i;int j;cout<<"输入顶点数";cin>>i;cout<<endl;n=i;for (i = 0;i<n;i++){T data;cout<<"输入顶点值";cin>>data;adjlist[i] = new EdgeNode<T>;adjlist[i]->adjvex = data;adjlist[i]->pnext = NULL;cout<<adjlist[i]->adjvex<<endl;//adjlist++;}cout<<"输入边数";cin>>e;for (int i=0;i<e;i++){int from;int to;cout<<endl<<"输入起点(节点序号)";cin>>from;cout<<endl<<"输入终点(节点序号)";cin>>to;EdgeNode<T> *node = new EdgeNode<T>;EdgeNode<T> *temp = adjlist[from];while(temp->pnext!=NULL)temp = temp->pnext;node->adjvex = adjlist[to]->adjvex;node->pnext = NULL;temp->pnext = node;//adjlist[from] = node;}}int main(int argc, char* argv[])
{Graph<int> g;g.CreatALGraph();//g.BFSTraverse();g.DFSTraverse();system("pause");return 0;
}
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6858815
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果