#include<iostream>#define Maxvexnum 10
using namespace std;typedefchar vertextype;//邻接表定义typedefstruct ArcNode {int adjvex;struct ArcNode* nextarc;}ArcNode;typedefstruct VexNode {
vertextype data;
ArcNode* firstarc;}VexNode,AdjList[Maxvexnum];typedefstruct{int vexnum, arcnum;
AdjList vertice;}AL_Graph;//邻接表intLocateVex_AL(AL_Graph& g,char vex);voidCreateGraph_AL(AL_Graph& g);voidPrintGraph_AL(AL_Graph& g);voidDFS_AL(AL_Graph& g,int vex);intLocateVex_AL(AL_Graph& g,char vex){/*
int i = 0;
do
{
if (g.vertice[i].data == vex)
return i;
i++;
} while (i < g.vexnum);
*//*****************这样也可以,看来就只是缺少一个break************************/for(int i =0; i < g.vexnum; i++)if(g.vertice[i].data == vex){return i;break;}}voidCreateGraph_AL(AL_Graph& g){
cout <<"输入边的总点数,总边数"<< endl;
cin >> g.vexnum >> g.arcnum;for(int i =0; i < g.vexnum; i++){
cout <<"输入第"<< i +1<<"个顶点"<< endl;
cin >> g.vertice[i].data;
g.vertice[i].firstarc =NULL;}for(int i =0; i < g.arcnum; i++){char v1, v2;
cout <<"输入第"<<i+1<<"条边"<< endl;
cin >> v1 >> v2;int a =LocateVex_AL(g, v1);int b =LocateVex_AL(g, v2);//cout << a << b;
ArcNode* p1 = new ArcNode;
p1->adjvex = b;
p1->nextarc = g.vertice[a].firstarc;
g.vertice[a].firstarc = p1;
ArcNode* p2 = new ArcNode;
p2->adjvex = a;
p2->nextarc = g.vertice[b].firstarc;
g.vertice[b].firstarc = p2;}}voidPrintGraph_AL(AL_Graph& g){
cout <<"输出图的顶点\n"<< endl;for(int i =0; i < g.vexnum; i++)
cout << g.vertice[i].data;
cout <<"输出图的边"<< endl;
ArcNode * p = new ArcNode;for(int i =0; i < g.vexnum; i++)for(p = g.vertice[i].firstarc; p !=NULL; p = p->nextarc)
cout << g.vertice[i].data << g.vertice[p->adjvex].data << endl;}//邻接表图的深度优先遍历,递归调用voidDFS_AL(AL_Graph& g,int vex){
visited[vex]= true;
ArcNode* p = new ArcNode;
p = g.vertice[vex -1].firstarc;while(p !=NULL){int w = p->adjvex;//读取访问权限冲突,可能是数组越界if(!visited[w]){DFS_AL(g, w);
cout <<LocateVex_AL(g, w)<< endl;}else
p = p->nextarc;}}intmain(){
AL_Graph g;CreateGraph_AL(g);
cout <<LocateVex_AL(g,'d')<< endl;//PrintGraph_AL(g);}
代码写的很多,其实就是在这个里面
intLocateVex_AL(AL_Graph& g,char vex){/*
int i = 0;
do
{
if (g.vertice[i].data == vex)
return i;
i++;
} while (i < g.vexnum);
*//*****************这样也可以,看来就只是缺少一个break************************/for(int i =0; i < g.vexnum; i++)if(g.vertice[i].data == vex){return i;//break;}}