程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> POJ 1719最大匹配

POJ 1719最大匹配

編輯:關於C語言

很明顯的最大匹配題目。而且題目是SPJ的,可以直接用匈牙利算法計算從行到列的最大匹配數

 

我的代碼:

Source Code

Problem: 1719   User: bingshen
Memory: 1160K   Time: 16MS
Language: C++   Result: Accepted


Source Code
#include<stdio.h>
#include<string.h>

bool map[1005][1005];
bool used[1005];
int link[1005];
int n,m;

bool dfs(int u)
{
 int i;
 for(i=1;i<=m;i++)
 {
  if(map[u][i]&&!used[i])
  {
   used[i]=true;
   if(link[i]==-1||dfs(link[i]))
   {
    link[i]=u;
    return true;
   }
  }
 }
 return false;
}

int main()
{
 int i,j,x,y,t,num;
 scanf("%d",&t);
 while(t--)
 {
  num=0;
  scanf("%d%d",&n,&m);
  memset(map,0,sizeof(map));
  memset(link,-1,sizeof(link));
  if(n>m)
  {
   printf("NO ");
   continue;
  }
  for(i=1;i<=m;i++)
  {
   scanf("%d%d",&x,&y);
   map[x][i]=true;
   map[y][i]=true;
  }
  for(i=1;i<=n;i++)
  {
   memset(used,0,sizeof(used));
   if(dfs(i))
    num++;
  }
  if(num<n)
  {
   printf("NO ");
   continue;
  }
  else
  {
   for(i=1;i<=m;i++)
   {
    if(link[i]!=-1)
     printf("%d ",link[i]);
    else
    {
     for(j=1;j<=n;j++)
      if(map[j][i])
      {
       printf("%d ",j);
       break;
      }
    }
   }
   printf(" ");
  }
 }
 return 0;
}

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