图算法(一)——基本图算法(BFS,DFS及其应用)(1)

时间:2023-03-09 04:27:03
图算法(一)——基本图算法(BFS,DFS及其应用)(1)

1)BFS

广度优先搜索:给定源节点s,生成广度优先搜索树
广度优先搜索树中从节点s到节点v的简单路径对应的就是s到v的最短路径(边数最少的路径)
广度优先:将已发现节点与未发现节点之间的边界(灰色节点),沿其广度方向向外扩张

 #include<stack>
#include<vector>
#include<queue>
#include<algorithm> using namespace std;
#define INF 99999999
#define NIL -1
int n;
int g[][];
struct Node
{
int color;
int d; //distance
int pi; //pi,ancestor
}t[];
queue<int> q; void BFS(int s)
{
for (int i=;i<n;i++)
{
if (i!=s)
{
t[i].color = ;
t[i].d = INF;
t[i].pi = NIL;
}
}
t[s].color = ;
t[s].d = ;
t[s].pi = NIL;
q.push(s);
while (!q.empty())
{
int u = q.front();
q.pop();
for (int v=;v<n;v++)
{
if ((g[u][v] == )&&(u != v))
{
if (t[v].color == )
{
t[v].color = ;
t[v].d = t[u].d + ;
t[v].pi = u;
q.push(v);
}
}
}
t[u].color = ;
}
} /*
int main()
{
while (cin>>n)
{
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
cin>>g[i][j];
}
}
int s;
cin>>s;
BFS(s);
for (int i=0;i<n;i++)
{
cout<<i<<" "<<t[i].d<<" "<<t[i].pi<<endl;
}
}
return 0;
}
*/