//顺丰 学术交流AC代码 #include<iostream> using namespace std; typedef char VertexType; typedef int WeightType; #define MAXVEX 200002 #define MAXEDGE 100001 #define MYINFINITY 65535 int numPeople = 0, numLang = 0, numInfo = 0; int numMachine = -1; typedef struct Node {     int adjVex;     struct Node* next; }EdgeNode; typedef struct {     EdgeNode* firstEdge; }Vertex; typedef struct {     Vertex vexList[MAXVEX];     int numVertex, numEdge; }MGraph; void CreateMGraph(MGraph* G) {     G->numVertex = numPeople+numLang;     for (int i = 0; i < G->numVertex; i++)     {         G->vexList[i].firstEdge = NULL;     }     G->numEdge = numInfo;     for (int k = 0; k < G->numEdge; k++)     {         int  i = 0, j = 0;;         cin >> i >> j;         j = j + 100000;         EdgeNode* p = new(EdgeNode);         p->adjVex = j;         p->next = G->vexList[i].firstEdge;         G->vexList[i].firstEdge = p;         p = new(EdgeNode);         p->adjVex = i;         p->next = G->vexList[j].firstEdge;         G->vexList[j].firstEdge = p;     } } void DFS(MGraph& G, int i, bool* visited) //极大连通子图的深度优先遍历 {     visited[i] = true;     EdgeNode* p = G.vexList[i].firstEdge;     while (p != NULL)     {         if (visited[p->adjVex] == false)             DFS(G, p->adjVex, visited);         p = p->next;     } } void DFSTraverse(MGraph& G) //深度优先遍历 {     bool visited[MAXVEX];     for (int i = 1; i <=numPeople; i++)         visited[i] = false;     for (int i = 1; i <=numPeople; i++)         if (visited[i] == false)         {             DFS(G, i, visited);             numMachine++;         }              } int main() {     MGraph G;     cin >> numPeople >> numLang >> numInfo;     if (numInfo == 0)     {         cout <<   numPeople ;         return 0;     }           CreateMGraph(&G);     DFSTraverse(G);     cout << numMachine;     system("pause");     return 0; } 
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务