程序运行不了......

ding1188 2007-11-28 06:57:42
程序编译能通过,可就是不能运行...望高手解答,跪谢
//SeqList.h
#ifndef SEQLIST_H
#define SEQLIST_H
#include<iostream>
using namespace std;
const int maxSize=20;
template<class T>class SeqList
{
private:
T data[maxSize];
int len;
public:
SeqList();
~SeqList();
int Length()const;//返回线性表的长度
T Get(int i)const;//返回第i个数据元素
int Locate(T&item)const;//返回item在表中的位置
int Insert(const T&item,int i);//在序号i前插入item,成功返回1,否则返回0
int Insert(const T&item);//在表尾插入item,成功返回1,否则返回0
T Delete(const int&i);//删除序号为i的元素,并返回
int Empty();//表为空返回1,否则返回0
void Clear();//把表清空
};
template<class T>SeqList<T>::SeqList()
{
len=0;
}
template<class T>SeqList<T>::~SeqList()
{
}
template<class T>int SeqList<T>::Length()const
{
return len;
}
template<class T>T SeqList<T>::Get(int i)const
{
if(i>=1&&i<=len)return data[i-1];
return NULL;
}
template<class T>int SeqList<T>::Locate(T&item)const
{
for(int i=1;i<len;i++)
{
if(data[i-1]==item)break;
}
if(i>len)return 0;
return i;
}
template<class T>int SeqList<T>::Insert(const T&item,int i)
{
if(len==maxSize) return 0;
if(i<1||i>len+1)return 0;
for(int j=len;j>=i;j--)
data[j]=data[j-1];
data[i-1]=item;
len++;
return 1;
}
template<class T>int SeqList<T>::Insert(const T&item)
{
if(len>maxSize)return 0;
data[len]=item;
len++;
return 1;
}
template<class T>T SeqList<T>::Delete(const int &i)
{
if(len==0)return NULL;
if(i<1||i>len)return NULL;
T t=data[i-1];
for(int j=i;j<len;j++)
data[j-1]=data[j];
len--;
return i;
}
template<class T>int SeqList<T>::Empty()
{
if(len==0)return 1;
return 0;
}
template<class T>void SeqList<T>::Clear()
{
len=0;
}
#endif


//Graph.h
#include<iostream>
#include"SeqList.h"
using namespace std;
const int MaxVertexes=20;
template<class VertexT,class ArcT>class Graph
{
private:
SeqList<VertexT>Vertexes;//存储顶点的信息
ArcT Arcs[MaxVertexes][MaxVertexes];//存储边的信息
int CurrentNumArcs;//当前的边数
int FindVertex(SeqList<VertexT>&L,const VertexT&v)
{return L.Locate(v);}//查找顶点v是否存在
int GetVertexPos(const VertexT&v)
{return FindVertex(Vertex,v);}//取顶点v在数组中的位置
public:
Graph(int num=MaxVertexes);
int IsEmpty()const{return Vertex.Empty();}
int NUmberOfVertexes()const{return Vertexes.Length();}
int NUmberOfArcs(){return CurrentNumArcs;}
VertexT GetValue(VertexT v);//取图中顶点v的值,如果不存在,返回空
ArcT GetWeight(VertexT v1,VertexT v2);//返回边(v1,v2)上的权
int GetFirstNeighbor(VertexT v);//取顶点v的第一个邻接点的序号,如果不存在返回-1
int GetNextNeighbor(VertexT v1,VertexT v2);//取图中顶点v1的在v2之后的下一个邻接点的序号,如果不存在,返回-1
int InsertVertex(VertexT& v);//在图中插入v,成功返回1,否则返回0
int InsertArc(VertexT v1,VertexT v2);//在图中插入依次依附于顶点v1和v2的边,成功返回1,否则返回0
void DeleteVertex(VertexT v);//删除顶点v及依附与v的边
void DeleteArc(VertexT v1,VertexT v2);//在图中删除依附与顶点v1和v2的边
void DepthFirstSearch();//深度优先遍历
void DFS(int v,int num[]);
};
template<class VertexT,class ArcT>Graph<VertexT,ArcT>::Graph(int num)
{
for(int i=0;i<num;i++)
{
for(int j=0;i<num;j++)
Arcs[i][j]=0;
}
CurrentNumArcs=0;
}
template<class VertexT,class ArcT>VertexT Graph<VertexT,ArcT>::GetValue(VertexT v)
{
int i=Vertexes.Locate(v);
if(i)
return NULL;
else
return Vertexes.Get(i);
}
template<class VertexT,class ArcT>ArcT Graph<VertexT,ArcT>::GetWeight(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i||j)
return NULL;
else
return Arcs[i][j];
}
template<class VertexT,class ArcT>int Graph<VertexT,ArcT>::GetFirstNeighbor(VertexT v)
{
int j=Vertexes.Locate(v)
if(j)
return -1;
else
for(i=0;i<Vertexes.Length();i++)
{
if(Arcs[j][i]==1)
return i;
}
}
template<class VertexT,class ArcT>int Graph<VertexT,ArcT>::GetNextNeighbor(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i||j)
return -1;
else
for(int k=v2+1;k<Vertexes.Length();k++)
if(Arcs[i][k]==1)
return k;
}
template<class VertexT,class ArcT>int Graph<VertexT,ArcT>::InsertVertex(VertexT &v)
{
return Vertexes.Insert(v);
}
template<class VertexT,class ArcT>int Graph<VertexT,ArcT>::InsertArc(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i||j)
return 0;
Arcs[i][j]=1;
CurrentNumArcs++;
return 1;
}
template<class VertexT,class ArcT> void Graph<VertexT,ArcT>::DeleteVertex(VertexT v)
{
int k=Vertexes.Locate(v);
for(int i=0;i<Vertexes.Length();i++)
{
if(Arcs[i][k]!=0)CurrentNumArcs--;
if(Arcs[k][i]!=0)CurrentNumArcs--;
}
for(i=v+1;i<Vertexes.Length();i++)
for(int j=0;j<Vertexes.Length();j++)
{
Arcs[i-1][j]=Arcs[i][j];
Arcs[j][i-1]=Arcs[j][i];
}
for(i=0;i<Vertexes.Length();i++)
{
Arcs[i][Vertexes.Length()-1]=0;
Arcs[Vertexes.Length()-1][i]=0;
}
Vertexes.Delete(k);
}
template<class VertexT,class ArcT> void Graph<VertexT,ArcT>::DeleteArc(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i||j)
return ;
Arcs[i][j]=0;
CurrentNumArcs--;
}
template<class VertexT,class ArcT> void Graph<VertexT,ArcT>::DepthFirstSearch()
{
int num[MaxVertexes];
for(int i=0;i<Vertexes.Length();i++)
num[i]=0;
for( i=0;i<Vertexes.Length();i++)
{
if(num[i]==0)
DFS(i,num);
}
}
template<class VertexT,class ArcT> void Graph<VertexT,ArcT>::DFS(int v,int num[])
{
int NextV[MaxVertexes]={0};
num[v]=1;
int j=0;
for(int i=0;i<Vertexes.Length();i++)
{
if(Arcs[v][i]==1)
{
NextV[j]=i;
j++;
}
}
for(j=0;NextV[j];j++)
{
if(num[NextV[j]]==0)
{
cout<<Vertexes.Get(v)<<"----"<<Vertexes.Get(NextV[j])<<endl;
DFS(NextV[j],num);
}
}
}
//main.cpp
#include<iostream>
#include"Graph.h"
using namespace std;
void main()
{
Graph<char,int>graph;
int temp;
char temp1,temp2;
cout<<"请输入插入的顶点数:";
cin>>temp;
cout<<endl;
cout<<"请输入顶点的值(字符):";
for(int i=0;i<temp;i++)
{
cin>>temp1;
graph.InsertVertex(temp1);
}
cout<<"请输入边的条数:";
cin>>temp;
cout<<endl;
cout<<"请输入插入边的起点和结尾:";
for(i=0;i<temp;i++)
{
cin>>temp1>>temp2;
graph.InsertArc(temp1,temp2);
}
graph.DepthFirstSearch();

}
...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyunliuhen 2007-11-28
  • 打赏
  • 举报
回复
好长好长 ^_^
ding1188 2007-11-28
  • 打赏
  • 举报
回复
三楼,能写一下在那里改了吗????谢谢
ryfdizuo 2007-11-28
  • 打赏
  • 举报
回复
template <class VertexT,class ArcT>
Graph <VertexT,ArcT>::Graph(int num)
{
for(int i=0;i <num;i++)
{
for(int j=0;i <num;j++)
Arcs[i][j]=0;
}
CurrentNumArcs=0;
}
构造函数里面写错了;
for(int j=0; i<num; j++)
越界了
ding1188 2007-11-28
  • 打赏
  • 举报
回复
楼上你什么意思啊????
ckt 2007-11-28
  • 打赏
  • 举报
回复

#ifndef SEQLIST_H
#define SEQLIST_H
#include <iostream>
using namespace std;
const int maxSize=20;
template <class T> class SeqList
{
private:
T data[maxSize];
int len;
public:
SeqList();
~SeqList();
int Length()const;//返回线性表的长度
T Get(int i)const;//返回第i个数据元素
int Locate(T&item)const;//返回item在表中的位置
int Insert(const T&item,int i);//在序号i前插入item,成功返回1,否则返回0
int Insert(const T&item);//在表尾插入item,成功返回1,否则返回0
T Delete(const int&i);//删除序号为i的元素,并返回
int Empty();//表为空返回1,否则返回0
void Clear();//把表清空
};
template <class T> SeqList <T> ::SeqList()
{
len=0;
}
template <class T>
SeqList <T> ::~SeqList()
{
}
template <class T>
int SeqList <T> ::Length()const
{
return len;
}
template <class T> T
SeqList <T> ::Get(int i)const
{
if(i>=1&&i <=len)
return data[i-1];
return NULL;
}
template <class T>
int SeqList <T> ::Locate(T&item)const
{
for(int i=1;i <len;i++)
{
if(data[i-1]==item)break;
}
if(i> len)return 0;
return i;
}
template <class T>
int SeqList <T> ::Insert(const T&item,int i)
{
if(len==maxSize) return 0;
if(i <1 ||i> len+1)return 0;
for(int j=len;j> =i;j--)
data[j]=data[j-1];
data[i-1]=item;
len++;
return 1;
}
template <class T>
int SeqList <T> ::Insert(const T&item)
{
if(len> maxSize)return 0;
data[len]=item;
len++;
return 1;
}
template <class T>
T SeqList <T> ::Delete(const int &i)
{
if(len==0)return NULL;
if(i <1 | |i> len)return NULL;
T t=data[i-1];
for(int j=i;j <len;j++)
data[j-1]=data[j];
len--;
return i;
}
template <class T> int SeqList <T> ::Empty()
{
if(len==0)return 1;
return 0;
}
template <class T> void SeqList <T> ::Clear()
{
len=0;
}
#endif


//Graph.h
#include <iostream>
#include"SeqList.h"
using namespace std;
const int MaxVertexes=20;
template<class VertexT,class ArcT>
class Graph
{
private:
SeqList <VertexT> Vertexes;//存储顶点的信息
ArcT Arcs[MaxVertexes][MaxVertexes];//存储边的信息
int CurrentNumArcs;//当前的边数
int FindVertex(SeqList <VertexT> &L,const VertexT&v)
{return L.Locate(v);}//查找顶点v是否存在
int GetVertexPos(const VertexT&v)
{return FindVertex(Vertex,v);}//取顶点v在数组中的位置
public:
Graph(int num = MaxVertexes);
int IsEmpty()const{return Vertex.Empty();}
int NUmberOfVertexes()const{return Vertexes.Length();}
int NUmberOfArcs(){return CurrentNumArcs;}
VertexT GetValue(VertexT v);//取图中顶点v的值,如果不存在,返回空
ArcT GetWeight(VertexT v1,VertexT v2);//返回边(v1,v2)上的权
int GetFirstNeighbor(VertexT v);//取顶点v的第一个邻接点的序号,如果不存在返回-1
int GetNextNeighbor(VertexT v1,VertexT v2);//取图中顶点v1的在v2之后的下一个邻接点的序号,如果不存在,返回-1
int InsertVertex(VertexT& v);//在图中插入v,成功返回1,否则返回0
int InsertArc(VertexT v1,VertexT v2);//在图中插入依次依附于顶点v1和v2的边,成功返回1,否则返回0
void DeleteVertex(VertexT v);//删除顶点v及依附与v的边
void DeleteArc(VertexT v1,VertexT v2);//在图中删除依附与顶点v1和v2的边
void DepthFirstSearch();//深度优先遍历
void DFS(int v,int num[]);
};
template <class VertexT,class ArcT>
Graph <VertexT,ArcT>::Graph(int num)
{
for(int i = 0; i < num; i++)
{
for(int j = 0; j < num;j++)
Arcs[i][j]=0;
}
CurrentNumArcs=0;
}
template <class VertexT,class ArcT>
VertexT Graph <VertexT,ArcT>::GetValue(VertexT v)
{
int i=Vertexes.Locate(v);
if(i)
return NULL;
else
return Vertexes.Get(i);
}
template <class VertexT,class ArcT>
ArcT Graph <VertexT,ArcT>::GetWeight(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i | |j)
return NULL;
else
return Arcs[i][j];
}
template <class VertexT,class ArcT>
int Graph <VertexT,ArcT> ::GetFirstNeighbor(VertexT v)
{
int j=Vertexes.Locate(v)
if(j)
return -1;
else
for(i=0;i <Vertexes.Length();i++)
{
if(Arcs[j][i]==1)
return i;
}
}
template <class VertexT,class ArcT>
int Graph <VertexT,ArcT>::GetNextNeighbor(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i | |j)
return -1;
else
for(int k=v2+1;k <Vertexes.Length();k++)
if(Arcs[i][k]==1)
return k;
}
template <class VertexT,class ArcT>
int Graph <VertexT,ArcT>::InsertVertex(VertexT &v)
{
return Vertexes.Insert(v);
}
template <class VertexT,class ArcT>
int Graph <VertexT,ArcT> ::InsertArc(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i ||j)
return 0;
Arcs[i][j]=1;
CurrentNumArcs++;
return 1;
}
template <class VertexT,class ArcT>
void Graph <VertexT,ArcT> ::DeleteVertex(VertexT v)
{
int k=Vertexes.Locate(v);
for(int i=0;i <Vertexes.Length();i++)
{
if(Arcs[i][k]!=0)CurrentNumArcs--;
if(Arcs[k][i]!=0)CurrentNumArcs--;
}
for(i=v+1;i <Vertexes.Length();i++)
for(int j=0;j <Vertexes.Length();j++)
{
Arcs[i-1][j]=Arcs[i][j];
Arcs[j][i-1]=Arcs[j][i];
}
for(i=0;i <Vertexes.Length();i++)
{
Arcs[i][Vertexes.Length()-1]=0;
Arcs[Vertexes.Length()-1][i]=0;
}
Vertexes.Delete(k);
}
template<class VertexT,class ArcT>
void Graph <VertexT,ArcT> ::DeleteArc(VertexT v1,VertexT v2)
{
int i,j;
i=Vertexes.Locate(v1);
j=Vertexes.Locate(v2);
if(i | |j)
return ;
Arcs[i][j]=0;
CurrentNumArcs--;
}
template<class VertexT,class ArcT>
void Graph <VertexT,ArcT> ::DepthFirstSearch()
{
int num[MaxVertexes];
for(int i=0;i <Vertexes.Length();i++)
num[i]=0;
for( i=0;i <Vertexes.Length();i++)
{
if(num[i]==0)
DFS(i,num);
}
}
template<class VertexT,class ArcT>
void Graph <VertexT,ArcT>::DFS(int v,int num[])
{
int NextV[MaxVertexes]={0};
num[v]=1;
int j=0;
for(int i=0;i <Vertexes.Length();i++)
{
if(Arcs[v][i]==1)
{
NextV[j]=i;
j++;
}
}
for(j=0;NextV[j];j++)
{
if(num[NextV[j]]==0)
{
cout <<Vertexes.Get(v) <<"----" <<Vertexes.Get(NextV[j]) <<endl;
DFS(NextV[j],num);
}
}
}
//main.cpp
#include <iostream>
#include"Graph.h"
using namespace std;
void main()
{
Graph <char,int> graph;
int temp;
char temp1,temp2;
cout <<"请输入插入的顶点数:";
cin>> temp;
cout <<endl;
cout << "请输入顶点的值(字符):";
for(int i=0;i <temp;i++)
{
cin>> temp1;
graph.InsertVertex(temp1);
}
cout <<"请输入边的条数:";
cin>> temp;
cout <<endl;
cout <<"请输入插入边的起点和结尾:";
for(i=0;i <temp;i++)
{
cin>> temp1>> temp2;
graph.InsertArc(temp1,temp2);
}
graph.DepthFirstSearch();
}

ding1188 2007-11-28
  • 打赏
  • 举报
回复

for(int j=0; i <num; j++)
改为for(int j=0; j<num; j++)后,还是不能运行.
直接出现press any key to continue

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧