这个题的题意是:在一个城镇中有路口和街道,这些街道是单向的并且不会形成环。每一个路口都会降落一名士兵,这些士兵会沿着街道的方向走。求走完所有路口所需要最少的士兵个数。
归纳这个题可得为,有向无环图的最小路径覆盖数,可以通过匈牙利算法求得。
在建图的过程中,跟无向图的建图类似,但是单向的。
以下是代码:
View Code
1 #include2 #include 3 #include 4 using namespace std; 5 6 bool array[121][121]; 7 int res[121]; 8 bool use[121]; 9 int v1,v2;10 11 bool find(int i)12 {13 int j;14 for(j=1;j<=v2;j++)15 {16 if(array[i][j] && !use[j])17 {18 use[j]=true;19 if(res[j]==0 || find(res[j]))20 {21 res[j]=i;22 return true;23 }24 }25 }26 return false;27 }28 29 int main()30 {31 int num;32 int insec,street;33 int i,m,n;34 int ans;35 scanf("%d",&num);36 while(num--)37 {38 ans=0;39 memset(array,false,sizeof(array));40 memset(res,0,sizeof(res));41 scanf("%d%d",&insec,&street);42 43 for(i=0;i