數據結構課程設計——圖結構

目錄

存儲結構

圖的遍歷

相關算法及其應用


存儲結構

鄰接矩陣

鄰接表

圖的遍歷

深度優先遍歷

bool edg[100][100];
bool visited[100];
memset(edg, 0, sizeof(edg));
memset(visited, 0, sizeof(visited));
vector<int> result;
int num;//節點個數
 
void DFS(int u)//u爲節點下標
{
	visited[u] = true;
	result.push_back(u);
	for (int i = 0;i < num;i++)
	{
		if (visited[i] == false&&edg[i][u]==true)
        //當i節點未被訪問且i節點與該節點u存在邊時
			DFS(i);
	}
}
//得到的result序列即爲按DFS遍歷的順序結果

廣度優先遍歷

bool edg[100][100];
bool visited[100];
memset(edg, 0, sizeof(edg));
memset(visited, 0, sizeof(visited));
vector<int> result;
int num, E;

void BFS(int p)
{
	queue<int> q;
	int i;
	q.push(p);
	visited[p] = true;
	while (!q.empty())
    //按照隊列中的順序,訪問完一個節點其所有相連的節點後
    //再按順序訪問與其子節點相連的節點...直到訪問完所有節點,隊列爲空
	{
		int s = q.front();
		q.pop();
		result.push_back(s);
		for (i = 0;i < num;i++)
		{
			if (visited[i] == false && edg[i][s] == true)
            //在所有節點中找到未被訪問過的且與當前result中最後一個節點s有邊相連的節點
			{
				q.push(i);
				visited[i] = true;
                //放入隊列中,標記爲已訪問
			}
		}
	}
}

 

相關算法及其應用

最短路徑——Dijkstra算法、Floyd算法

​最小生成樹——Prime算法、Kruscal算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章