#include<cstdio>
#include<memory>
using namespace std;
const int MAX = 10001;
bool map[MAX][MAX],visit[MAX];
int match[MAX];
int a, b;
bool DFS(int i)
{
int j, k = 1;
for(j = 1 ; j <= b; j++)
{
if(map[i][j] && !visit[j])
{
visit[j] = true;
k = match[j];
match[j] = i;
if(k == 0 || DFS(k))
return true;
match[j] = k;
}
}
return false;
}
int Hungary()
{
int j, ans = 0;
memset(match, 0, sizeof(match));
for(j = 1; j <= a; j++)
{
memset(visit,false, sizeof(visit));
if(DFS(j))
ans++;
}
return ans;
}
int main()
{
int i, j, n,ans;
memset(map,false,sizeof(map));
scanf("%d%d",&a,&b);
ans = Hungary();
printf("%d\n",ans);
return 0;
}
posted @
2006-10-24 18:34 beyonlin 閱讀(1349) |
評論 (1) |
編輯 收藏
轉自:http://blog.csdn.net/liu_tang/archive/2006/08/01/1008611.aspx
函數名: scanf
功? 能: 執行格式化輸入
用? 法: int scanf(char *format[,argument,...]);
scanf()函數是通用終端格式化輸入函數,它從標準輸入設備(鍵盤) 讀取輸入的信息??梢宰x入任何固有類型的數據并自動把數值變換成適當的機內格式。
其調用格式為:????? scanf("<格式化字符串>",<地址表>);
scanf()函數返回成功賦值的數據項數,出錯時則返回EOF。
其控制串由三類字符構成:
1。格式化說明符;
2??瞻追?;
3。非空白符;
(A)??????????????? 格式化說明符
格式字符?????????? 說明
%a???????????????? 讀入一個浮點值(僅C99有效)
%A???????????????? 同上
%c???????????????? 讀入一個字符
%d???????????????? 讀入十進制整數
%i???????????????? 讀入十進制,八進制,十六進制整數
%o???????????????? 讀入八進制整數
%x???????????????? 讀入十六進制整數
%X???????????????? 同上
%c???????????????? 讀入一個字符
%s???????????????? 讀入一個字符串
%f???????????????? 讀入一個浮點數
%F???????????????? 同上
%e???????????????? 同上
%E???????????????? 同上
%g???????????????? 同上
%G???????????????? 同上
%p???????????????? 讀入一個指針
%u???????????????? 讀入一個無符號十進制整數
%n???????????????? 至此已讀入值的等價字符數
%[]??????????????? 掃描字符集合
%%???????????????? 讀%符號
posted @
2006-10-18 22:51 beyonlin 閱讀(785) |
評論 (0) |
編輯 收藏
istringstream對象可以綁定一行字符串,然后以空格為分隔符把該行分隔開來。
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string str, line;
while(getline(cin, line))
{
istringstream stream(line);
while(stream>>str)
cout<<str.c_str()<<endl;
}
return 0;
}
測試:
input:
abc? ?df?? e????????????? efgeg????? ffg
ouput:
abc
df
e
efgeg
ffg
posted @
2006-10-17 00:37 beyonlin 閱讀(19294) |
評論 (3) |
編輯 收藏
#include<cstdio>
const int MAX = 10000;
const int INF = 1000000;
int clo[MAX];
int low[MAX];
int c[MAX][MAX];
bool flag[MAX];
int beg[MAX],end[MAX];//記錄生成樹的每條邊的兩個頂點
int Prim(int n)
{
int i, j, k, ans = 0, pair = 0;
flag[1] = true;
for(i = 2; i <= n; i++)
{
low[i] = c[1][i];
clo[i] = 1;
flag[i] = false;
}
for(i = 1; i < n; i++)
{
j = 1;
int min = INF;
for(k = 2; k <=n; k++)
{
if(low[k] < min && !flag[k])
{
min = low[k];
j = k;
}
}
flag[j] = true;
beg[i] = j;
end[i] = clo[j];
ans += c[j][clo[j]];
for(k = 2; k <= n; k++)
{
if(c[j][k] < low[k] && !flag[k])
{
low[k] = c[j][k];
clo[k] = j;
}
}
}
return ans;
}
int main()
{
int i, j, n, m;
scanf("%d%d",&n,&m);
for(i = 1; i <= n; i++)
{
for(j = 1; j <=n; j++)
{
c[i][j]=INF;
}
}
return 0;
}
posted @
2006-10-13 23:48 beyonlin 閱讀(3066) |
評論 (4) |
編輯 收藏
#include<cstdlib>
#include<cstdio>
int main()
{
int num = 10;
char str[100];
itoa(num, str, 2);
printf("%s\n", str);
return 0;
}
itoa()函數有3個參數:第一個參數是要轉換的數字,第二個參數是目標字符串,第三個參數是轉移數字時所用 的基數。在上例中,轉換基數為10。10:十進制;2:二進制……
于是想到了一個十進制轉二進制的方法:
#include<cstdlib>
#include<cstdio>
int main()
{
int num = 10;
char str[100];
int n = atoi(itoa(num, str, 2));
printf("%d\n",n);
return 0;
}
先把num轉換為二進制的字符串,再把該字符串轉換為整數。
posted @
2006-10-12 00:59 beyonlin 閱讀(67443) |
評論 (14) |
編輯 收藏