#include <iostream>
#include <strstream>
#include <string>
using namespace std;
//定义把无权图或有全图转为邻接矩阵
class CMatrix
{
public:
//构造函数,n为图的顶点个数
CMatrix():m_matrix(NULL), m_n(0) { }
//析构函数,回收内存
~CMatrix() {
if(NULL != m_matrix){
for (int i=0; i<m_n; ++i)
if( NULL != m_matrix[i] ) //判断是否分配内存
delete [] m_matrix[i];
delete m_matrix;
}
}
void CreateMatrix ( );
void PrintMatrix ( );
int **GetMatrix ();
private:
int **m_matrix; //矩阵
int m_n; //矩阵的秩
};
//创建矩阵
void CMatrix::CreateMatrix () {
cout<<"输入图的顶点数n:";
cin>>m_n;
//申请内存
for (int i=0; i<m_n; ++i)
m_matrix = new int*[m_n];
for (int j=0; j<m_n; ++j)
m_matrix[j] = new int[m_n];
//初始化Matrix
for (int i=0; i<m_n; ++i) {
for(int j=0; j<m_n; ++j) {
m_matrix[i][j] = 0;
}
}
cout<<"输入边集(如:{<1,2>}\\{(1,2)},若为带权图则为{<1,2>3}\\{(1,2)3}:"<<endl;
string str;
cin>>str;
//将 string 转换成 char*
char *cstr = new char[str.size()+1]; //最后加上'\0'
int i=0;
for(i=0; i != str.size(); ++i)
cstr[i] = str.at(i);
cstr[i]='\0';
cout<<cstr<<endl;
istrstream strin(cstr);
char cTmp, cEdge1, cEdge2, cEdge3;//cEdge1存 < ,cEdge2存 , ,cEdge3存 >
int iBgn, iEnd; //边的起点、终点
strin>>cTmp;
while (true) {
char cPeek;
cPeek = strin.peek();
//边集读取完成退出
if( '}' == cTmp || '}' == cPeek) {
break;
}
//读取边集<a,b> 或 (a,b)
strin>>cEdge1>>iBgn>>cEdge2>>iEnd>>cEdge3;
cout<<cEdge1<<iBgn<<cEdge2<<iEnd<<cEdge3<<endl;
//继续读取下一条边
if( cTmp=='{' || cTmp==',') {
m_matrix[iBgn][iEnd] = 1;
}
//peek下一个字符,看是否为带权图
cTmp = strin.peek();
cout<<cTmp<<endl;
//此图是否为 带权图
if ( cTmp>='0' && cTmp<='9') {
int weight =0;
strin>>weight;
m_matrix[iBgn][iEnd] = weight;
strin>>cTmp;//读取逗号
} else {
//cTmp可能为 ‘,’, }
strin>>cTmp;
}
}
}
//打印Matrix
void CMatrix::PrintMatrix() {
cout<<"该图的邻接矩阵如下:"<<endl;
for (int i=0; i<m_n; ++i) {
cout<<"\t\t";
for (int j=0; j<m_n; ++j)
cout<<m_matrix[i][j]<<'\t';
cout<<'\n';
}
}
//得到邻接矩阵
int **CMatrix::GetMatrix () {
return this->m_matrix;
}
int main()
{
CMatrix matrix;
int **pMatrix = NULL;
matrix.CreateMatrix();
matrix.PrintMatrix();
pMatrix = matrix.GetMatrix();
return 0;
}
#include <strstream>
#include <string>
using namespace std;
//定义把无权图或有全图转为邻接矩阵
class CMatrix
{
public:
//构造函数,n为图的顶点个数
CMatrix():m_matrix(NULL), m_n(0) { }
//析构函数,回收内存
~CMatrix() {
if(NULL != m_matrix){
for (int i=0; i<m_n; ++i)
if( NULL != m_matrix[i] ) //判断是否分配内存
delete [] m_matrix[i];
delete m_matrix;
}
}
void CreateMatrix ( );
void PrintMatrix ( );
int **GetMatrix ();
private:
int **m_matrix; //矩阵
int m_n; //矩阵的秩
};
//创建矩阵
void CMatrix::CreateMatrix () {
cout<<"输入图的顶点数n:";
cin>>m_n;
//申请内存
for (int i=0; i<m_n; ++i)
m_matrix = new int*[m_n];
for (int j=0; j<m_n; ++j)
m_matrix[j] = new int[m_n];
//初始化Matrix
for (int i=0; i<m_n; ++i) {
for(int j=0; j<m_n; ++j) {
m_matrix[i][j] = 0;
}
}
cout<<"输入边集(如:{<1,2>}\\{(1,2)},若为带权图则为{<1,2>3}\\{(1,2)3}:"<<endl;
string str;
cin>>str;
//将 string 转换成 char*
char *cstr = new char[str.size()+1]; //最后加上'\0'
int i=0;
for(i=0; i != str.size(); ++i)
cstr[i] = str.at(i);
cstr[i]='\0';
cout<<cstr<<endl;
istrstream strin(cstr);
char cTmp, cEdge1, cEdge2, cEdge3;//cEdge1存 < ,cEdge2存 , ,cEdge3存 >
int iBgn, iEnd; //边的起点、终点
strin>>cTmp;
while (true) {
char cPeek;
cPeek = strin.peek();
//边集读取完成退出
if( '}' == cTmp || '}' == cPeek) {
break;
}
//读取边集<a,b> 或 (a,b)
strin>>cEdge1>>iBgn>>cEdge2>>iEnd>>cEdge3;
cout<<cEdge1<<iBgn<<cEdge2<<iEnd<<cEdge3<<endl;
//继续读取下一条边
if( cTmp=='{' || cTmp==',') {
m_matrix[iBgn][iEnd] = 1;
}
//peek下一个字符,看是否为带权图
cTmp = strin.peek();
cout<<cTmp<<endl;
//此图是否为 带权图
if ( cTmp>='0' && cTmp<='9') {
int weight =0;
strin>>weight;
m_matrix[iBgn][iEnd] = weight;
strin>>cTmp;//读取逗号
} else {
//cTmp可能为 ‘,’, }
strin>>cTmp;
}
}
}
//打印Matrix
void CMatrix::PrintMatrix() {
cout<<"该图的邻接矩阵如下:"<<endl;
for (int i=0; i<m_n; ++i) {
cout<<"\t\t";
for (int j=0; j<m_n; ++j)
cout<<m_matrix[i][j]<<'\t';
cout<<'\n';
}
}
//得到邻接矩阵
int **CMatrix::GetMatrix () {
return this->m_matrix;
}
int main()
{
CMatrix matrix;
int **pMatrix = NULL;
matrix.CreateMatrix();
matrix.PrintMatrix();
pMatrix = matrix.GetMatrix();
return 0;
}