template<class DataType>
class MGraph
{
public:
MGraph();
~MGraph(){}
void DFSTraverse(int v);
void BFSTraverse(int v);
int vertexNum,arcNum;//图的顶点数和边数
DataType vertex[MaxSize];//顶点
private:
int arc[MaxSize][MaxSize];//图的边长
bool DFSvisited[MaxSize];//定义一个DFS遍历过标记
bool BFSvisited[MaxSize];//定义一个BFS遍历过标记
};
template<class DataType>//构造函数
MGraph<DataType>::MGraph()
{
int i,j;
fstream fcin_vertex;
fcin_vertex.open("vertex.txt",ios::in);//打开一个文件用于从文件输入顶点
vertexNum=0,arcNum=0;//令顶点数、边数赋值为0
while(!fcin_vertex.eof())
fcin_vertex>>vertex[vertexNum++];
fcin_vertex.close();
memset(DFSvisited,0,sizeof(DFSvisited));//这个函数用来给DFSvisited数组所有成员赋0
memset(BFSvisited,0,sizeof(BFSvisited));
for(i=0;i<vertexNum;i++)
for(j=0;j<vertexNum;j++)
{
if(i==j)
arc[i][j]=0;//如果是相同顶点,则初始化为0
else
arc[i][j]=MAX;//否则将边长初始化为MAX;
}
fstream fcin_arc;
fcin_arc.open("arc.txt",ios::in);//打开一个文件用于从文件输入边
i=0,j=0;
while(i!=-1)
{
fcin_arc>>i;
if(i==-1)
continue;
else
{
fcin_arc>>j;
if(arc[i][j]==0||arc[i][j]==MAX)//如果这条边等于0或者等于MAX,说明这条边还没被修改过,这时候修改一次,边数+1,
//否则,则说明这条边已经被修改过,再修改边数也不会增加
arcNum++;
fcin_arc>>arc[i][j];
arc[j][i]=arc[i][j];//由于是无向图,i到j的距离等于j到i的距离
}
}
fcin_arc.close();
}
抱歉,这些参考资料中没有与“构造哈夫曼编码和输出正常结果”相关的内容,无法给出具体的解决方案。建议提供更多问题细节以及您的代码和数据结构/算法实现方式,这样才能更好地帮助您解决问题。谢谢理解。