邻接表表示的“无向图”

来源:互联网 发布:win10手机共享网络usb 编辑:程序博客网 时间:2024/05/18 00:50
/***c++:邻接表表示的无向图*@author shq*@date 2016/12/10*/#include"stdafx.h"#include<iostream>#include<vector>#include<iomanip>#define MAX 100int isChar(char ch);using namespace std;class adjTable{private:class ENode{public:int ivex;ENode *nextEdge;};class VNode{public:char data;ENode *firstEdge;};private:int mvexnum;int medgenum;VNode mvex[MAX];public://构造函数adjTable();//析构函数~adjTable();//打印邻接表void print();private://读取一个节点字符char readChar();//获得ch在邻接表表头节点的位置int getPosition(char ch);//将node节点链接到list末尾void linkList(ENode *list, ENode *node);};//初始化邻接表adjTable::adjTable(){char c1, c2;int p1, p2;ENode *node1;//输入节点数cout << "input vertex number: ";cin >> mvexnum;//输入边数cout << "input edge number: ";cin >> medgenum;//判断输入节点数和边数是否合法if (mvexnum<1 || medgenum<1 || (medgenum >(mvexnum*(mvexnum - 1)))){cout << "input error: invalid paramater." << endl;return;}//初始化邻接表顶点for (int i = 0; i<mvexnum; i++){cout << "vertex(" << i << "):";cin >> mvex[i].data;mvex[i].firstEdge = NULL;}//初始化邻接表边for (int i = 0; i<medgenum; i++){cout << "edge(" << i << "):";//获得边对应的两个顶点c1 = readChar();c2 = readChar();//获得两个顶点字符在邻接表中对应的位置p1 = getPosition(c1);p2 = getPosition(c2);node1 = new ENode();node1->ivex = p2;//将节点p1加入链接表末尾if (mvex[p1].firstEdge == NULL){mvex[p1].firstEdge = node1;}elselinkList(mvex[p1].firstEdge, node1);}}char adjTable::readChar(){char ch;do{cin >> ch;} while (!isChar(ch));return ch;}int isChar(char ch){if (ch >= 'a'&&ch <= 'z')return 1;else if (ch >= 'A'&&ch <= 'Z')return 1;elsereturn 0;}int adjTable::getPosition(char ch){int p;for (p = 0; p<mvexnum; p++){if (mvex[p].data == ch)return p;}}void adjTable::linkList(ENode *list, ENode *node){ENode *p;p = list;while (p->nextEdge){p = p->nextEdge;}p->nextEdge = node;}void adjTable::print(){ENode *p;for (int i = 0; i<mvexnum; i++){cout << i << "(" << mvex[i].data << "):";p = mvex[i].firstEdge;while (p){cout << p->ivex << "(" << mvex[p->ivex].data << ") ";p = p->nextEdge;}cout << endl;}}int _tmain(int argc, _TCHAR* argv[]){adjTable *pG;pG = new adjTable();pG->print();return 0;}

0 0
原创粉丝点击