HDU 4324번 Triangle LOVE(토폴로지 정렬)

1592 단어
제목 링크 ~~>
토폴로지 서열을 배우자마자 이 문제를 가지고 시험해 봤는데 결과가...시작할 때 두 개의 for 순환을 사용하고scanf("%d", &g[i][j])를 추가하다니, 어지러워 죽겠다!!!이거 해결하고 빨리 쓰고 TLE도 빨리 썼어요!한참 동안 가지를 자르려고 했는데 이 문제는 정말 자를 수가 없어요...마지막으로 다른 사람의 코드가 입력할 때만의scanf("%s", g[i])를 참고했습니다.달라~~~ 바뀌면 AC, 어이없어.
코드:
#include<stdio.h>
#include<string.h>
int topo[2003],n;
char g[2002][2003];
int toposort()
{
    int f=0;
         for(int i=0;i<n;i++)
         {
                 f=0;
             for(int j=0;j<n;j++)
                if(topo[j]==0)
                {
                       f=1;
                       topo[j]=-1;
                    for(int k=0;k<n;k++)
                       if(g[j][k]=='1')
                       {
                           topo[k]--;
                       }
                      break;
                 }
                if(f==0)
                    return 0;
         }
         return 1;
}
int main()
{
    int q=1,T,i,j;
     scanf("%d",&T);
     while(T--)
     {
        memset(topo,0,sizeof(topo));
        scanf("%d",&n);
        for(i=0;i<n;i++)
          {
              scanf("%s",g[i]);
              for(j=0;j<n;j++)
              {
                    if(g[i][j]=='1')
                  {
                       topo[j]++;
                  }
              }
          }
          if(toposort())
                  printf("Case #%d: No
",q++); else printf("Case #%d: Yes
",q++); } return 0; }

좋은 웹페이지 즐겨찾기