グラフ (グラフ理論から) の表現と変換を扱うプログラム。隣接リストと行列は、次の関数プログラムのメモリ エラーとコンパイラが指すメモリ エラーで終了するため、ベクトルの動的配列のように実装されます (ベクトルのベクトルではない理由を尋ねないでください)。孤立ベクトルの定義。
int vertex,edges;
vector<int> *adjacencyList,*adjacencyMatrix;
void listToAdMatrix(int vertexNumber, vector<int> *List, vector<int> *Matrix){
int in=0,cont=0;
for(int i=0;i<vertexNumber;i++){
in=i;
for(auto j=List[in].begin();j!=List[in].end();j++){
for(int k=0;k<vertexNumber;++k){
if(k==*j) Matrix[cont].push_back(1);
else Matrix[cont].push_back(0);
}
cont++;
}
}
}
//function call
//vertex(number) and ajacencyList are initialized
adjacencyMatrix=new vector<int>[vertex];
listToAdMatrix(vertex,adjacencyList,adjacencyMatrix);
コンパイラが指す STL の「エラーの原因」:
http://i51.tinypic.com/2dt0t9e.jpg
エラーメッセージ:
graph.exe の 0x001a543b で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0xfdfdfe01。
隣接リストを埋めるために使用される fillList 関数:
void fillList(int vertexNumber, vector<int> *List){
int input=0;
for (int i=0;i<vertexNumber;i++){
int in=i;
cout<<"Introduce adjacent vertexes for the vertex -"<<i+1<<"-:"<<endl;
for(int j=0;j<vertexNumber;j++){
std::cout<<i+1<<"-";
std::cin>>input;
if(input==0) break;
List[i].push_back(input-1);
}
}
}
手がかりは大歓迎です。