似乎能用了
This commit is contained in:
parent
780a537e50
commit
edd925d4fc
3 changed files with 47 additions and 14 deletions
|
@ -14,28 +14,51 @@ int main()
|
||||||
std::string name;
|
std::string name;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
printf("选择操作:1添加/覆盖节点2添加/覆盖边3删除节点4删除边5显示图\n");
|
printf("选择操作:1添加/覆盖节点2添加边3删除节点4删除边5显示图\n");
|
||||||
scanf("%d", &op);
|
scanf("%d", &op);
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
printf("分别输入序号 节点名:");
|
printf("分别输入序号 节点名:");
|
||||||
std::cin >> id1 >> name;
|
std::cin >> id1 >> name;
|
||||||
gv.insect(id1, name);
|
printf("插入到ID位%d的位置\n", gv.insect(id1, name));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
printf("分别输入起始节点序号 到达节点序号 边权重:");
|
printf("分别输入起始节点序号 到达节点序号 边权重:");
|
||||||
std::cin >> id1 >> id2 >> w;
|
std::cin >> id1 >> id2 >> w;
|
||||||
gv.link(id1, id2, w);
|
switch (gv.link(id1, id2, w))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("成功\n");
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
printf("顶点不存在\n");
|
||||||
|
break;
|
||||||
|
case -2:
|
||||||
|
printf("边已经存在\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
printf("输入节点序号:");
|
printf("输入节点序号:");
|
||||||
std::cin >> id1;
|
std::cin >> id1;
|
||||||
|
gv.remove(id1);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
printf("分别输入起始节点序号 到达节点序号:");
|
printf("分别输入起始节点序号 到达节点序号:");
|
||||||
std::cin >> id1 >> id2;
|
std::cin >> id1 >> id2;
|
||||||
gv.unlink(id1, id2);
|
switch (gv.unlink(id1, id2))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("成功\n");
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
printf("顶点不存在\n");
|
||||||
|
break;
|
||||||
|
case -2:
|
||||||
|
printf("边不存在\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
gv.display();
|
gv.display();
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
// #define gNodeArray(T) binNode<T> *
|
|
||||||
|
|
||||||
template <class Te>
|
template <class Te>
|
||||||
class Edge
|
class Edge
|
||||||
|
@ -54,7 +54,8 @@ class graphVertex
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
Vector<Vertex<Tv> *> V;
|
Vector<Vertex<Tv> *> V;
|
||||||
Vector<Vector<Edge<Te> *>> E;
|
Edge<Te> *E[100][100] = {NULL};
|
||||||
|
|
||||||
int v;
|
int v;
|
||||||
int e;
|
int e;
|
||||||
|
|
||||||
|
@ -99,12 +100,14 @@ public:
|
||||||
}
|
}
|
||||||
virtual Tv remove(int id)
|
virtual Tv remove(int id)
|
||||||
{
|
{
|
||||||
|
if(V[id]==NULL)
|
||||||
|
return (Tv)0;
|
||||||
for (int j = 0; j < v; j++)
|
for (int j = 0; j < v; j++)
|
||||||
{
|
{
|
||||||
if (E[id][j] != NULL)
|
if (E[id][j] != NULL)
|
||||||
{
|
{
|
||||||
delete E[id][j];
|
delete E[id][j];
|
||||||
E[id].put(j, NULL);
|
E[id][j] = NULL;
|
||||||
V[j]->inDegree--;
|
V[j]->inDegree--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,7 +133,7 @@ public:
|
||||||
V[id2]->inDegree++;
|
V[id2]->inDegree++;
|
||||||
e++;
|
e++;
|
||||||
Edge<Te> *temp = new Edge<Te>(w);
|
Edge<Te> *temp = new Edge<Te>(w);
|
||||||
(E[id1]).put(id2, temp);
|
E[id1][id2]= temp;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// 解除 id1->id2 连接
|
// 解除 id1->id2 连接
|
||||||
|
@ -143,7 +146,7 @@ public:
|
||||||
if (V[id1] == NULL || V[id2] == NULL)
|
if (V[id1] == NULL || V[id2] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (E[id1][id2] != NULL)
|
if (E[id1][id2] == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
V[id1]->outDegree--;
|
V[id1]->outDegree--;
|
||||||
|
@ -156,23 +159,30 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void display()
|
virtual void display()
|
||||||
{
|
{
|
||||||
|
// std::cout << std::setw(14) << temp->weight;
|
||||||
|
//第一行
|
||||||
std::cout << std::left << std::setw(14) << " ";
|
std::cout << std::left << std::setw(14) << " ";
|
||||||
for (int i = 0; i < V._len; i++)
|
for (int i = 0; i < V._len; i++)
|
||||||
if (V[i] != NULL)
|
if (V[i] != NULL)
|
||||||
std::cout << std::setw(4) << i << std::setw(10) << V[i]->data;
|
std::cout << std::setw(4) << i << std::setw(10) << V[i]->data;
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
for (int i = 0; i < V._len; i++)
|
for (int i = 0; i < V._len; i++)
|
||||||
if (V[i] != NULL)
|
if (V[i] != NULL)
|
||||||
{
|
{
|
||||||
|
//每行第一个
|
||||||
std::cout << std::setw(4) << i << std::setw(10) << V[i]->data;
|
std::cout << std::setw(4) << i << std::setw(10) << V[i]->data;
|
||||||
|
|
||||||
|
//后面的
|
||||||
for (int j = 0; j < V._len; j++)
|
for (int j = 0; j < V._len; j++)
|
||||||
if (V[j] != NULL)
|
if (V[j] != NULL)
|
||||||
{
|
{
|
||||||
if (E[i][j] == NULL)
|
if (E[i][j] != NULL)
|
||||||
std::cout << std::setw(14) << "-";
|
|
||||||
else
|
|
||||||
std::cout << std::setw(14) << E[i][j]->weight;
|
std::cout << std::setw(14) << E[i][j]->weight;
|
||||||
|
else
|
||||||
|
std::cout << std::setw(14) << "-";
|
||||||
|
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ public:
|
||||||
Vector()
|
Vector()
|
||||||
{
|
{
|
||||||
_used = 0;
|
_used = 0;
|
||||||
_len = 100;
|
_len = 10;
|
||||||
_v = new T[_len];
|
_v = new T[_len];
|
||||||
for (int i = 0; i < _len; i++)
|
for (int i = 0; i < _len; i++)
|
||||||
{
|
{
|
||||||
|
|
Reference in a new issue