HDU4324 - Triangle LOVE : http://acm.showproblemhdu.edu.cn/.php?pid=4324
标准的拓补排序,上代码 :
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 2010; int In[MAXN]; char Map[MAXN][MAXN]; int T,N; int x,y; int flag,Case = 0; void Initial() { flag = 0; memset(In,0,sizeof(In)); } void TopoSort() { int i,j,k; for(i = 0;i < N;i++) { /* //这样写也可以过,但是时间会多一点点 for(j = 0;j < N;j++) { if(!In[j]) { In[j]--,flag++; for(k = 0;k < N;k++) { if(Map[j][k]) Map[j][k] = 0,In[k]--; } } } */ for(j = 0;j < N;j++) if(!In[j])//找出第一个入度为0的节点 break; if(j == N)//若没有入度为零的节点,则必成环 { flag = 1; break; }else{ In[j]--;//,,, ,,, for(k = 0;k < N;k++) if(Map[j][k] == '1') In[k]--; } } if(flag)printf("Case #%d: Yes\n",++Case); else printf("Case #%d: No\n",++Case); } int main() { int i,j; scanf("%d",&T); while(T--) { Initial(); scanf("%d",&N); for(i = 0;i < N;i++) { scanf("%s",Map[i]); for(j = 0;j < N;j++) if(Map[i][j] == '1')//若有字符'1',则代表当前人 i 喜欢'1'字符所代表的人 j In[j]++;//入度加一 } TopoSort(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-11 22:44:36