24h購物| | PChome| 登入
2009-07-28 19:16:27| 人氣2,215| 回應3 | 上一篇 | 下一篇

ACM 10004 Q10004: Bicoloring

推薦 0 收藏 0 轉貼0 訂閱站台

作法: DFS

嘗試所有可能...

/************************************************************/

#include<stdio.h>
#include<stdlib.h>
int map[201][201]={0},top[201]={0},color[201]={0};
int n,m;
int a,b,c,x,y,find;
void DFS (int now)
{
  if(now==n) {find=0;return;}
  if(find==0) return;
  int a,flagx=0,flagy=0;
  for(a=0;a<top[now];a++)
   {
      if(color[map[now][a]]==1) flagx=1;
      else if(color[map[now][a]]==2) flagy=1;
   }  
   if(flagx==0&&flagy==1)  
      {color[now]=1; DFS (now+1);}
   else if(flagx==1&&flagy==0) 
      {color[now]=2; DFS (now+1);}
   if(flagx==0&&flagy==0)
      {
        color[now]=1; DFS (now+1);
        color[now]=2; DFS (now+1);
      }
}
main()
{
 while(scanf("%d",&n)==1&&n!=0)
     {
       scanf("%d",&m);
       for(a=0;a<n;a++) {top[a]=0;color[a]=0;}
       for(a=0;a<m;a++)
         {
           scanf("%d %d",&x,&y);
           map[x][top[x]]=y;
           map[y][top[y]]=x;
           top[x]++;top[y]++;
         }
       find=1;
       DFS (0);
       if(find==0) printf("BICOLORABLE.\n");
       else printf("NOT BICOLORABLE.\n");
     }
 return 0;
}

台長: 來源不明
人氣(2,215) | 回應(3)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 10364 Q10364: Square
此分類上一篇:ACM 10926 Q10926: How Many Dependencies?

路人
請教一下這題DFS要怎麼結合起來?
我想不太出來,DFS不是只是走出路徑嗎?
這跟著色有什麼樣的關係呢?
可否指點一下@~@ 謝謝
2009-08-21 17:26:57
版主回應
其實我也不是很了解,不過我是用DFS的方式想辦法配出所有可能
例如 : 我先塗點1,之後塗點2
假使2有跟1連,那麼我的2就必須塗不同色
2沒有連 ,那麼可以用2種方式去塗
此時我就伸下去找點3要怎麼塗色
假使與2相鄰的有2種顏色的話,那麼點2就沒有顏色可以填了
此時退回去,退回去換之前那個點1...
大致上就這樣類推.
2009-08-21 21:32:00
路人
大概了解了
謝謝你哦!!
2009-08-22 08:23:09
owalf
台灣硬起來! 抵制菲律賓!!
2013-05-20 08:35:54
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文