資源簡介
無向圖 破圈法求最小生成樹
WIN32控制臺應用程序 VS2010以上編譯運行成功
數據結構上機作業
圖用的是鄰接矩陣表示方法
代碼片段和文件信息
#include
#include
#define?INF?9999
#define?UNVIS?0
#define?VIS?1
using?namespace?std;
class?node{
public:
char?value;
node()
{
}
};
class?graph{
public:
int?save_i;
bool?stop_push_vector;
bool??find_flag;
vector?myvec;
int?**?matrix;
bool?**?edge_flag;
bool?*?mark;
node?*??nodes;
int?length;
bool?haveloop()
{
myvec.clear();
for?(int?i?=?0;?i? {
for?(int?j?=?0;?j? {
if(i==j)
edge_flag[i][j]=VIS;
else
edge_flag[i][j]=UNVIS;
}
}
if(DFS_search()==true)//有環
{
//刪除最大的邊??在myvec中有記錄
return?true;
}
else
return?false;
}
graph(int?num=5)
{
length=num;
mark?=?new?bool[length];
nodes?=?new?node[length];
matrix?=?new?int*[length];
edge_flag=new?bool*[length];
for?(int?i?=?0;?i? {
edge_flag[i]=new?bool[length];
}
for?(int?i?=?0;?i? {
matrix[i]=new?int[length];
}
//初始化
for?(int?i?=?0;?i? {
mark[i]=UNVIS;
}
for?(int?i?=?0;?i? {
for?(int?j?=?0;?j? {
if(i==j)
matrix[i][j]=0;
else?
matrix[i][j]=INF;
}
}
//輸入頂點value
cout<<“輸入“< for?(int?i?=?0;?i? {
cin>>nodes[i].value;
}
}
int?get_su(char?value)
{
for?(int?i?=?0;?i? {
if(nodes[i].value==value)
return?i;
}
cout<<“erro“;
return?-1;
}
void?setedge(char?ichar?jint?weight)
{
matrix[get_su(i)][get_su(j)]=weight;
matrix[get_su(j)][get_su(i)]=weight;
}
bool?DFS_search()
{
//重置標記
find_flag=false;//沒找到環
stop_push_vector=false;
for?(int?i?=?0;?i? {
mark[i]=UNVIS;
}
for?(int?i?=?0;?i? {
if(find_flag==false?&&mark[i]==UNVIS)
DFS_S(i);
}
if(find_flag==true)
{
//找到并刪除存儲在myvec中最大的邊
vector::iterator?i;
node?*?p1*p2;
p1=*(myvec.begin());
p2=*(myvec.begin()+1);
int?max_edge?=?matrix[get_su(p1->value)][get_su(p2->value)];//前2個點的邊的長
for?(i?=?myvec.begin()+1;?(i+1)?!=?myvec.end();?i++)//從第(23)個邊開始?到end-1end
{
if(?matrix[get_su((*i)->value)][get_su((*(i+1))->value)]??>?max_edge)
{
max_edge?=??matrix[get_su((*i)->value)][get_
- 上一篇:m行k列矩陣乘以k行n列矩陣
- 下一篇:C++迷宮問題 尋找最短路徑
評論
共有 條評論