题目
建立一个无向图,输入起点和终点,搜索最短路径并打印。 Example: Input: 4 1 2 1 3 1 4 2 5 1 1 5 Output: 2 1 2 5
代码
#include<iostream>
#include<vector>
using namespace std
;
vector
<int> path
,tmp
;
vector
<int> v
[1000];
bool visited
[1000];
int minn
,start
,endi
;;
void dfs(int cur
,int depth
)
{
if(cur
==endi
)
{
if(minn
>depth
)
{
minn
=depth
;
path
=tmp
;
}
return;
}
visited
[cur
]=true;
for(int i
:v
[cur
])
{
if(!visited
[i
])
{
visited
[i
]=true;
tmp
.emplace_back(i
);
dfs(i
,depth
+1);
visited
[i
]=false;
tmp
.pop_back();
}
}
}
int main()
{
int n
,a
,b
;
cin
>>n
;
for(int i
=0;i
<n
;i
++)
{
cin
>>a
>>b
;
v
[a
].emplace_back(b
);
v
[b
].emplace_back(a
);
}
cin
>>n
;
for(int i
=0;i
<n
;i
++)
{
cin
>>start
>>endi
;
minn
=9999;
path
.clear();
path
.emplace_back(start
);
visited
[start
]=true;
dfs(start
,0);
visited
[start
]=false;
cout
<<minn
<<endl
;
cout
<<start
<<endl
;
for(int each
:path
) cout
<<each
<<endl
;
}
system("pause");
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-66087.html