北京大学在线在线提交系统(Online Judge)Problem 1000(就是输入2个整数然后输出其和)新解 :网络流
Problem 1000是很简单的一个问题,就是要求从标准输入设备输入2个整数然后在标准输出设备上输出它们的和。
(问题原地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1000)
下面是该问题讨论区发表的一个帖子给出一个解决办法,实在看不明白,有哪位高人来指点一下。
看该贴的原标题,这个解法跟网络相关?要熟悉了网络编程后才能弄懂?
//Problem 1000新解 :网络流
#include<stdio.h>
#include<string.h>
int c[4][4],f[4][4];
bool b[4];
int ans;
void init()
{
int a,b;
scanf("%d%d",&a,&b);
c[0][1]=a;c[1][3]=a;
c[0][2]=b;c[2][3]=b;
}
bool find(int x)
{
if(x==3)return true;
for(int i=0;i<4;i++)
{
if(f[x][i]<c[x][i]&&!b[i])
{
b[i]=true;
if(find(i))
{
f[x][i]++;f[i][x]--;
return true;
}
}
}
return false;
}
void process()
{
ans=0;
memset(b,false,sizeof(b));
b[0]=true;
while(find(0))
{
memset(b,false,sizeof(b));
b[0]=true;
ans++;
}
}
int main()
{
init();
process();
//if(ans!=a+b)ans=a+b;
printf("%d\n",ans);
return 0;
}