fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <limits.h>
  5.  
  6. int N;
  7. int Map[102][102];
  8. int Estimate[102];
  9.  
  10. int main()
  11. {
  12. int I,J,K;
  13. char Temp;
  14. while(EOF!=scanf("%d",&N))
  15. {
  16. /*Input*/
  17. memset(Map,0,4*102*102);
  18. for (I=2; I<=N; I++)
  19. {
  20. for (J=1; J<I-1; J++)
  21. {
  22. scanf("%c",&Temp);
  23. if (Temp!='x')
  24. {
  25. ungetc(Temp,stdin);
  26. }
  27. else
  28. {
  29. Map[I][J]=99999999;
  30. continue;
  31. }
  32. scanf("%d ",&K);
  33. Map[I][J]=K;
  34. Map[J][I]=K;
  35. }
  36. scanf("%c",&Temp);
  37. if (Temp!='x')
  38. {
  39. ungetc(Temp,stdin);
  40. }
  41. else
  42. {
  43. Map[I][J]=99999999;
  44. continue;
  45. }
  46. scanf("%d",&K);
  47. Map[I][J]=K;
  48. Map[J][I]=K;
  49. }
  50.  
  51. /*BellmanFord algorithm*/
  52. for (I=2;I<=N;I++)
  53. {
  54. Estimate[I]=99999999;
  55. }
  56. for (I=1;I<=N-1;I++)
  57. {
  58. for (J=1;J<=N;J++)
  59. {
  60. for (K=1;K<=N;K++)
  61. {
  62. if (Map[J][K]>0)
  63. {
  64. if (Estimate[K]>Estimate[J]+Map[J][K])
  65. {
  66. Estimate[K]=Estimate[J]+Map[J][K];
  67. }
  68. }
  69. }
  70. }
  71. }
  72.  
  73. /*find the longest path from source*/
  74. for (I=2,K=Estimate[1];I<=N;I++)
  75. {
  76. if (K<Estimate[I])
  77. {
  78. K=Estimate[I];
  79. }
  80. }
  81. printf("%d\n",K);
  82. }
  83. return 0;
  84. }
  85.  
Success #stdin #stdout 0s 2292KB
stdin
5
50
30 5
100 20 50
10 x x 10
stdout
35