程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ 1589 Professor John ~Floyd算法

ZOJ 1589 Professor John ~Floyd算法

編輯:C++入門知識

 這題用Floyd和Dij都可以,但是感覺用Floyd會十分方便,也是第一次使用Floyd算法,一開始沒有這個思路滴,參考別人的。。~~~~(>_<)~~~~

 

      

 
#include<stdio.h>   
#include<iostream>   
#include<string.h>   
using namespace std;  
int main(void)  
{  
    int ncases,n,i,j,k;  
    int map[30][30],mark[30][30];  
    cin>>ncases;  
    for(int f = 1;f<=ncases;f++)  
    {  
          memset(map,0,sizeof(map));  
          memset(mark,0,sizeof(mark));  
          int flag = 1;   
          cin>>n;  
          char s[4];  
          while(n--)  
          {  
                scanf("%s",s);  
                int a,b;  
                char o;  
                a = s[0]- 'A' + 1;  
                o = s[1];  
                b = s[2]- 'A' + 1;  
                if(o=='<')  
                     map[a][b] = 1;  
                else  
                     map[b][a] = 1;  
          }       
          memcpy(mark,map,sizeof(map));  
          for(k = 1;k<=28;k++)  
              for(i = 1;i<=28;i++)  
                   for(j =1;j<=28;j++)  
                         map[i][j] = map[i][j]||(map[i][k]&&map[k][j]);//這裡很巧妙地將Floyd做了變形。。至少我這個弱菜是這麼認為的,啊哈   
          printf("Case %d:\n",f);  
          for(i = 1;i<=28;i++)  
               for(j =1;j<=28;j++)  
                     if((map[i][j])&&!mark[i][j])  
                      {  
                             printf("%c<%c\n",i+'A'-1,j+'A'-1);  
                             flag = 0;  
                      }  
          if(flag)  
               printf("NONE\n");  
     }  
     return 0;  
 }  
            
                  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved