0001 template <typename Tv, typename Te> //顶点类型、边类型 0002 void UniPrint::p(GraphMatrix<Tv, Te>& s) { //图Graph 0003 Rank inD = 0; for (Rank i = 0; i < s.n; i++) inD += s.inDeg(i); 0004 Rank outD = 0; for (Rank i = 0; i < s.n; i++) outD += s.outDeg(i); 0005 printf("%s*(%d, %d):\n", typeid(s).name(), s.n, s.e); //基本信息:[%d] ~ (int) &s 0006 //标题行 0007 print(s.n); printf(" "); print(inD); printf("| "); 0008 for (Rank i = 0; i < s.n; i++) { print(s.vertex(i)); printf("["); print(s.status(i)); printf("] "); } 0009 printf("\n"); 0010 //标题行(续) 0011 print(outD); printf(" "); print(s.e); printf("| "); 0012 for (Rank i = 0; i < s.n; i++) { print(s.inDeg(i)); printf(" "); } 0013 printf("| dTime fTime Parent Weight\n"); 0014 //水平分隔线 0015 printf("-----------+"); for (Rank i = 0; i < s.n; i++) printf("------"); 0016 printf("-+----------------------------\n"); 0017 //逐行输出各顶点 0018 for (Rank i = 0; i < s.n; i++) { 0019 print(s.vertex(i)); printf("["); print(s.status(i)); printf("] "); print(s.outDeg(i)); printf("|"); 0020 for (Rank j = 0; j < s.n; j++) 0021 if (s.exists(i, j)) { printf(" "); print(s.type(i, j)); } 0022 else printf(" ."); 0023 printf(" |"); print(s.dTime(i)); printf(" "); print(s.fTime(i)); 0024 printf(" "); if ((i==s.parent(i)) || (-1==s.parent(i))) print("^"); else print(s.vertex(s.parent(i))); 0025 printf(" "); if (INT_MAX > s.prio(i)) print(s.prio(i)); else print(" INF"); 0026 printf("\n"); 0027 } 0028 printf("\n"); 0029 }