chkedges 916 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /* Looks for multiedges and loops, and output
  2. * those found along with counts. If the -d flag
  3. * is given, edge direction is taken into account.
  4. */
  5. BEGIN{
  6. char* ename;
  7. char* n;
  8. int doDir, cnt[];
  9. int loopcnt[];
  10. int nloops, nmulti;
  11. if ((ARGC > 0) && (ARGV[0] == "-d"))
  12. doDir = 1;
  13. else
  14. doDir = 0;
  15. }
  16. BEG_G{unset(cnt); unset(loopcnt); nloops = nmulti = 0;}
  17. E{
  18. if (doDir || (tail.name <= head.name)) ename=tail.name+"_"+head.name;
  19. else ename = head.name+"_"+tail.name;
  20. if (tail == head) {
  21. loopcnt[ename] += 1;
  22. if (loopcnt[ename] == 1) nloops += 1;
  23. }
  24. else {
  25. cnt[ename] += 1;
  26. if (cnt[ename] == 2) nmulti += 1;
  27. }
  28. }
  29. END_G{
  30. printf ("graph %s: %d loops %d multiedges\n", $.name, nloops, nmulti);
  31. for (cnt[n]) {
  32. if (cnt[n] > 1)
  33. printf ("%s : %d\n", n, cnt[n]);
  34. }
  35. for (loopcnt[n]) {
  36. if (loopcnt[n] > 0)
  37. printf ("%s : %d\n", n, loopcnt[n]);
  38. }
  39. }