mazeAnaly.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. #include "head.h"
  2. int crossNum(int graph[CONST_MAZEX][CONST_MAZEY],int,int);
  3. int mazeAnaly(int graph[CONST_MAZEX][CONST_MAZEY],int,int,int,int,int,int &);
  4. int crossNum(int graph[CONST_MAZEX][CONST_MAZEY],int x,int y)
  5. {
  6. int num=0;
  7. if(graph[x-1][y]==0)
  8. num++;
  9. if(graph[x+1][y]==0)
  10. num++;
  11. if(graph[x][y-1]==0)
  12. num++;
  13. if(graph[x][y+1]==0)
  14. num++;
  15. return num;
  16. }
  17. int mazeAnaly(int graph[CONST_MAZEX][CONST_MAZEY],int currX,int currY,
  18.   int lastX,int lastY,int height,int &tempMax)
  19. {
  20. // first time call this function the height is initialed as 1
  21. int tempX,tempY;
  22. int bifurcate=0;
  23. int sonMax[4]={0};
  24.                     
  25. if(crossNum(graph,currX,currY)<3 || graph[currX][currY]==1)
  26. height--;
  27. tempMax=height;
  28. if(graph[currX][currY]==1)
  29. return -1;
  30. if(currX>SIZEX_MAZE-1 || currX<0 || currY>SIZEY_MAZE || currY<0)
  31. return -1;
  32. for(int num=0;num<4;num++)
  33. {
  34. tempX=currX;
  35. tempY=currY;
  36. if(num==0) 
  37. if(currX!=lastX+1 || currY!=lastY)//go upwards
  38. tempX=currX-1;
  39. else 
  40. continue;
  41. else if(num==1 )
  42. if(currX!=lastX || currY!=lastY-1) //go rightwards
  43. tempY=currY+1;
  44. else 
  45. continue;
  46. else if(num==2 )
  47. if(currX!=lastX-1 || currY!=lastY) //go downwards
  48. tempX=currX+1;
  49. else 
  50. continue;
  51. else if(num==3)
  52. if(currX!=lastX || currY!=lastY+1) //go leftwards
  53. tempY=currY-1;
  54. else 
  55. continue;
  56. if(mazeAnaly(graph,tempX,tempY,currX,currY,height+1,sonMax[num])!=-1)
  57. bifurcate++;
  58. }
  59. if(bifurcate>1)  //it is an bifurcate at least
  60. {
  61. totalEdge=totalEdge+bifurcate;
  62. int max=sonMax[0];
  63. int secondMax=sonMax[0];
  64. int temp=0;
  65. for(int k=1;k<4;k++)
  66. {
  67. if(sonMax[k]>max)
  68. {
  69. max=sonMax[k];
  70. temp=k;
  71. }
  72. }
  73. if(temp==0)
  74. secondMax=sonMax[1];
  75. for(k=0;k<4;k++)
  76. {
  77. if(k==temp)
  78. continue;
  79. if(sonMax[k]>secondMax)
  80. secondMax=sonMax[k];
  81. }
  82. imbalance=imbalance+max-secondMax;
  83. tempMax=max;
  84. }
  85. else if(bifurcate==0)
  86. {
  87. if(height>treeHeight)
  88. treeHeight=height;
  89. totalLevel+=height;
  90. ::levelNum++;
  91. }
  92. else
  93. {
  94. tempMax=sonMax[0];
  95. for(int k=1;k<4;k++)
  96. if(sonMax[k]>tempMax)
  97. tempMax=sonMax[k];
  98. }
  99. return 0;
  100. }