#包含?& lt字符串& gt
#包含?& lt隊列& gt
使用?命名空間?std
int?FirstAdjVex(int?五);
int?NextAdjVex(int?v,?int?w);
作廢?DFS(int?五);?//從頂點v,?v是頂點數組的下標。
作廢?BFS(int?五);?//從頂點V開始對圖進行廣度優先遍歷,其中V是頂點數組的下標。
int?查找(字符串?a,int?n);
int?已訪問[10]= { 0 };
int?traver[10][10]= { 0 };
字符串?名稱[10];
int?主()
{
int?n,m,I,j,k;
字符串?甲、乙;
//freopen("Traver.txt "," r ",stdin);
CIN & gt;& gtn;
CIN & gt;& gtm;
for(I = 0;?我& ltn;?i++)
{
CIN & gt;& gta;
姓名[我]?=?a;
}
for(I = 0;?我& ltm;i++){
CIN & gt;& gta;
CIN & gt;& gtb;
j?=?找到(a,n);
k?=?find(b,n);
traver[j][k]?=?1;
traver[k][j]?=?1;
}
for(I = 0;?我& ltn;?i++){
如果(拜訪過[我]?==?0)
外勤支助部㈠;
}
cout & lt& lt”\ n”;
for(I = 0;?我& ltn;?i++){
拜訪過[我]?=?0;
}
for(I = 0;?我& ltn;?i++){
如果(拜訪過[我]?==?0)
BFS(壹);
}
cout & lt& lt”\ n”;
回歸?0;
}
//查找函數
int?查找(字符串?a,int?n){
int?我;
for(I = 0;?我& ltn;?i++){
如果(a?==?名字[我])
回歸?我;
}
回歸?-1;
}
int?FirstAdjVex(int?五)
{
int?我;
//從編號大的相鄰點開始訪問。
為了什麽?(我?=?9;?我?& gt=?0;?我-)
{
如果?(traver[v][i]?==?1)
回歸?我;
}
回歸?-1;
}
int?NextAdjVex(int?v,?int?w)
{
int?我;
為了什麽?(我?=?w?-?1;?我?& gt=?0;?我-)
{
如果?(traver[v][i]?==?1)
回歸?我;
}
回歸?-1;
}
作廢?DFS(int?五)
{
int?w;
//訪問頂點V(輸出頂點V的名稱)
cout & lt& ltname[v]& lt;& lt"?";
參觀過?=?1;
//找到頂點v的第壹個相鄰點W。
為了什麽?(w?=?FirstAdjVex(v);?w?& gt=?0;?w?=?NextAdjVex(v,w))
{
//如果沒有訪問過W,對頂點W進行深度優先搜索。
如果?(拜訪過[w]?==?0)
DFS(w);
}
}
作廢?BFS(int?五)?//從頂點V開始對圖進行廣度優先遍歷,其中V是頂點數組的下標。
{
int?w,?u;
隊列& ltint & gt?myqueue?//定義壹個隊列,元素是頂點的下標。
//把頂點v放到隊伍裏。
my queue . push(v);
cout & lt& ltname[v]& lt;& lt"?";
參觀過?=?1;
什麽時候?(!myqueue.empty())
{//當隊列不為空時進入循環。
//獲取隊列頭元素
u?=?my queue . front();
//團隊領導元素出列
my queue . pop();
//將u的所有相鄰點排隊。
w?=?FirstAdjVex(u);
什麽時候?(w?& gt=?0)
{
如果?(拜訪過[w]?==?0)
{
//訪問w
cout & lt& ltname[w]& lt;& lt"?";
拜訪過[w]?=?1;
//w加入團隊
my queue . push(w);
}
w?=?NextAdjVex(u,w);
}
}
}