#include "graph.hpp"
#include <iostream>
#include <stdio.h>

int main()
{
    // typedef struct data
    // {
    //     int id;
    //     std::string name;
    // }data;
    graphVertex<int, std::string> gv;
    int op, id1, id2, w;
    std::string name;
    while (1)
    {
        printf("选择操作:1添加/覆盖节点2添加边3删除节点4删除边5显示图6广度优先遍历\n");
        scanf("%d", &op);
        switch (op)
        {
        case 1:
            printf("分别输入序号 节点名:");
            std::cin >> id1 >> name;
            printf("插入到ID位%d的位置\n", gv.insect(id1, name));
            break;
        case 2:
            printf("分别输入起始节点序号 到达节点序号 边权重:");
            std::cin >> id1 >> id2 >> w;
            if (id1 == id2)
                printf("失败\n");
            switch (gv.link(id1, id2, w))
            {
            case 0:
                printf("成功\n");
                break;
            case -1:
                printf("顶点不存在\n");
                break;
            case -2:
                printf("边已经存在\n");
                break;
            }
            break;
        case 3:
            printf("输入节点序号:");
            std::cin >> id1;
            gv.remove(id1);
            break;
        case 4:
            printf("分别输入起始节点序号 到达节点序号:");
            std::cin >> id1 >> id2;
            switch (gv.unlink(id1, id2))
            {
            case 0:
                printf("成功\n");
                break;
            case -1:
                printf("顶点不存在\n");
                break;
            case -2:
                printf("边不存在\n");
                break;
            }
            break;
        case 5:
            gv.display();
            break;
        case 6:
            printf("输入起始节点序号:");
            std::cin >> id1;
            gv.BFS(id1);
            break;
        default:
            break;
        }
    }

    return 0;
}