永发信息网

求解试以下这个代码(就是匈牙利算法)

答案:1  悬赏:10  手机版
解决时间 2021-04-04 15:47
题目 :给出一张n*n(n
代码:
#include
#include
#include
using namespace std;
int hh[5]={0,1,-1,0,0},ll[5]={0,0,0,1,-1};
int used[101][101];
bool map[101][101];
int match[101][101],match2[101][101];
int n;

bool dfs(int x,int y)
{
if (x==0||y==0) return 0;
for (int i=1;i {
int h,l;
h=hh[i]+x;l=ll[i]+y;
if (h>0&&h0&&l if(used[h][l]==false)
{
used[h][l]=true;
if ((match[h][l]==0&&match2[h][l]==0)||dfs(match[h][l],match2[h][l])==true)
{
match[h][l]=x;
match2[h][l]=y;
return 1;
}
}
}
return 0;
}

int main()
{
int m,x,y;scanf("%d%d",&n,&m);
memset(map,1,sizeof(map));
for (int i=1;i {
scanf("%d%d",&x,&y);
map[x][y]=false;
//map[y][x]=false;
}
int tot=0;
for (int i=1;i for (int j=1;j {
memset(used,0,sizeof(used));
if (map[i][j]==true)
if (dfs(i,j)==true) tot++;
}
printf("%d",tot/2);
return 0;
}

主要是 if ((match[h][l]==0&&match2[h][l]==0)||dfs(match[h][l],match2[h][l])==true)
{
match[h][l]=x;
match2[h][l]=y;
return 1;
}
有递归调用这里
还有 match数组是干什么的

回答好的话会加分的
最佳答案



你去看百度百科的C代码吧
解释挺清楚的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
苹果6抹掉数据后屏幕解锁还有吗
曹丕阵亡台词,关兴/张苞的武将台词
年薪10万月发4000元,年终一次发放52000元如
咸话梅特别的咸,该怎么吃
用有时我想,有时,我有幻想造句
Today a lot of information can online.A. r
oppo指定维修中心怎么去啊,有知道地址的么
你好,我想找姓百的人,怎么联系你
花椒直播10级有什么用
新手武士怎么当
人和动物有什么区别?
鞍山千山的景区营业时间是几点?
手机支付宝芝麻分在哪,支付宝里面的芝麻信用
新疆小学生为什么十点上学
从松江新城到浦东机场坐地铁要多长时间?
推荐资讯
Clio珂莱欧素颜霜美白能持续多久,我在纠结买
俗话说,人们总会伤害他所爱的人。其实人们也
单选题抗战初期,国共合作抗日配合得较好的一
天门市中小学教师继续教育中心这个地址怎么能
海边黄昏美景的句子,描写黄昏山中景色的句子
怀孕47天,右卵巢内有包块,周边可见环形血流
人真得可以 左手画方 右手画圆么
为什么我的小米3玩着玩着突然就黑了,然后就
有谁吃过塑纤瘦,效果好吗,有什么副作用吗?
管道风机哪个牌子好?
单选题一只羊的卵细胞核被另一只羊的体细胞核
踢足球时候放的那个英文歌叫什么?歌词里面有
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?