import'dart:io';classEdge{intsrcVert;intdestVert;intdistance;Edge(this.srcVert,this.destVert,this.distance);}classPriorityQueue{intmaxSize=20;List<Edge>queueArray;intsize;PriorityQueue(){queueArray=newList<Edge>(this.maxSize);size=0;}voidinsert(Edgeitem){inti;for(i=0;i<size;i++){if(item.distance>=queueArray[i].distance){break;}}for(intj=size-1;j>=i;j--){queueArray[j+1]=queueArray[j];}queueArray[i]=item;size++;}EdgeremoveMin(){returnqueueArray[--size];}voidremoveN(intn){for(inti=n;i<size-1;i++){queueArray[i]=queueArray[i+1];}size--;}EdgepeekMin(){returnqueueArray[size-1];}boolisEmpty(){returnsize==0;}EdgepeekN(intn){returnqueueArray[n];}intfind(intfindDex){for(inti=0;i<size;i++){if(queueArray[i].destVert==findDex){returni;}}return-1;}}classVertex{Stringlabel;boolisInTree;Vertex(this.label){isInTree=false;}}classGraphMstw{finalintmaxVerts=20;finalintINFINITY=1000000;List<Vertex>vertexList;List<List<int>>adjMat;intnVerts;intcurrentVert;PriorityQueuepriorityQueue;intnTree;GraphMstw(){nTree=0;currentVert=0;vertexList=newList<Vertex>(maxVerts);adjMat=newList.generate(maxVerts,(inti)=>newList(maxVerts));nVerts=0;for(inti=0;i<maxVerts;i++){for(intj=0;j<maxVerts;j++){adjMat[i][j]=INFINITY;}}priorityQueue=newPriorityQueue();}voidaddVertex(Stringlabel){vertexList[nVerts++]=newVertex(label);}voidaddEdge(intstart,intend,intweight){adjMat[start][end]=weight;adjMat[end][start]=weight;}voiddisplayVertex(intv){stdout.write(vertexList[v].label);}voidmstw(){currentVert=0;while(nTree<nVerts-1){vertexList[currentVert].isInTree=true;nTree++;for(inti=0;i<nVerts;i++){if(i==currentVert){continue;}if(vertexList[i].isInTree){continue;}intdistance=adjMat[currentVert][i];if(distance==INFINITY){continue;}putInPriorityQueue(i,distance);}if(priorityQueue.size==0){stdout.writeln(' GRAPH NOT CONNECTED');return;}Edgeedge=priorityQueue.removeMin();intsourceVert=edge.srcVert;currentVert=edge.destVert;stdout.write(vertexList[sourceVert].label);stdout.write(vertexList[currentVert].label);stdout.write(' ');}for(inti=0;i<nVerts;i++){vertexList[i].isInTree=false;}}voidputInPriorityQueue(intnewVert,intnewDist){intqueueIndex=priorityQueue.find(newVert);if(queueIndex!=-1){EdgetempEdge=priorityQueue.peekN(queueIndex);intoldDist=tempEdge.distance;if(oldDist>newDist){priorityQueue.removeN(queueIndex);Edgeedge=newEdge(currentVert,newVert,newDist);priorityQueue.insert(edge);}}else{Edgeedge=newEdge(currentVert,newVert,newDist);priorityQueue.insert(edge);}}}voidmain(){GraphMstwgraph=newGraphMstw();graph.addVertex('A');graph.addVertex('B');graph.addVertex('C');graph.addVertex('D');graph.addVertex('E');graph.addVertex('F');graph.addEdge(0,1,6);// AB 6graph.addEdge(0,3,4);// AD 4graph.addEdge(1,2,10);// BC 10graph.addEdge(1,3,7);// BD 7graph.addEdge(1,4,7);// BE 7graph.addEdge(2,3,8);// CD 8graph.addEdge(2,4,5);// CE 5graph.addEdge(2,5,6);// CF 6graph.addEdge(3,4,12);// DE 12graph.addEdge(4,5,7);// EF 7stdout.write('Minimum spanning tree: ');graph.mstw();}