C_Node.h文件 保存顶点信息
class C_Node
{
public:
char data;
C_Node *Next;
C_Node *Follow;
C_Node(char p_data);
C_Node();
C_Node(C_Node *p_node);
};
C_Node::C_Node(C_Node *p_node)
{
data=p_node->data;
Next=p_node->Next;
Follow=p_node->Follow;
}
C_Node::C_Node()
{
Next=NULL;
Follow=NULL;
}
C_Node::C_Node(char p_data)
{
data=p_data;
Next=NULL;
Follow=NULL;
}
//Node.h文件,保存边信息
#include<iostream.h>
class Link_Node
{
public:
char pixel1;
char pixel2;
int lengh;
Link_Node *Next;
Link_Node(char p_pixel1,char p_pixel2,int p_lengh);
Link_Node(Link_Node *p_node);
Link_Node();
void Display();
};
Link_Node::Link_Node()
{
lengh=0;
Next=NULL;
}
Link_Node::Link_Node(char p_pixel1,char p_pixel2,int p_lengh)
{
pixel1=p_pixel1;
pixel2=p_pixel2;
lengh=p_lengh;
Next=NULL;
}
Link_Node::Link_Node(Link_Node *p_node)
{
pixel1=p_node->pixel1;
pixel2=p_node->pixel2;
lengh=p_node->lengh;
Next=p_node->Next;
}
void Link_Node::Display()
{
cout<<"{"<<pixel1<<","<<pixel2<<"}→"<<lengh<<endl;
}
Main.cpp
#include "Node.h"
#include "Queue.h"
#include "C_Node.h"
#include<iostream.h>
#include<stdio.h>
C_Node *CN[10];
C_Node EN[9];
int Sep(Link_Node array[],int start,int end)
{
int left=start;
int right=end;
Link_Node buffer;
int Povit=array[left].lengh;
while(left<right)
{
while(left<right && array[right].lengh>Povit)
right--;
buffer=array[left];
array[left]=array[right];
array[right]=buffer;
while(left<right && array[left].lengh<=Povit)
left++;
buffer=array[left];
array[left]=array[right];
array[right]=buffer;
}
array[left].lengh=Povit;
return left;
}
void QuickSort(Link_Node array[],int first,int last)
{
if(first<last)
{
int p= Sep(array,first,last);
QuickSort(array,first,p-1);
QuickSort(array,p+1,last);
}
}
bool Check_Item(int jop,int edp) //判定是否有环路产生
{
C_Node *Head=CN[jop];
while(Head->Next!=NULL)
{
if(Head->Next==CN[edp])
{
return true;
}
else
{
// cout<<"data="<<Head->data-'0'<<endl;
Head=Head->Next;
// cout<<"@@@@@"<<endl;
}
// cout<<"-----"<<endl;
// getchar();
}
C_Node *Front=CN[edp];
while(Front->Next!=NULL)
{
if(Front->Next==CN[jop])
{
return true;
}
else
{
Front=Front->Next;
}
}
return false;
}
void Add_Item(int jop,int edp)
{
C_Node *Head=CN[jop];
// cout<<"data="<<Head->data<<endl;
while(Head->Next!=NULL)
{
Head=Head->Next;
}
C_Node *Front=CN[edp];
while(Front->Follow!=NULL)
{
Front=Front->Follow;
}
Head->Next=Front;
Front->Follow=Head;
}
void main()
{
int road_num; //保存路径数目
cout<<"请问有几条路?"<<endl;
cin>>road_num;
//用于保存最小生成树部件信息
Link_Node *City=new Link_Node[road_num]; //用于保存城市路径信息
for(int i=0;i<road_num;i++)
{
CN[i]=new C_Node();//初始化部件信息
char jop; //起点
char edp; //终点
int distance; //距离
cout<<"请输入第"<<i+1<<"条路的起点:"<<endl;
cin>>jop;
cout<<"请输入第"<<i+1<<"条路的终点:"<<endl;
cin>>edp;
cout<<"请输入第"<<i+1<<"条路的路程:"<<endl;
cin>>distance;
cout<<"-----------------------------"<<endl;
City[i].pixel1=jop;
City[i].pixel2=edp;
City[i].lengh=distance;
}
QuickSort(City,0,road_num-1); //使用快速排序法按路程排序
for(i=0;i<road_num;i++) //将排序后的路况输出显示
{
cout<<"第"<<i+1<<"条路:"<<endl;
City[i].Display();
cout<<"*************"<<endl;
}
for(i=0;i<road_num;i++)
{
bool a=Check_Item(City[i].pixel1-'0'-16,City[i].pixel2-'0'-16);
if(!a)
{
cout<<"{"<<City[i].pixel1<<","<<City[i].pixel2<<","<<City[i].lengh<<"}******************************"<<endl;
Add_Item(City[i].pixel1-'0'-16,City[i].pixel2-'0'-16);
}
}
}