永发信息网

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

答案:1  悬赏:10  手机版
解决时间 2021-04-04 15:47
  • 提问者网友:謫仙
  • 2021-04-04 01:44
题目 :给出一张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数组是干什么的

回答好的话会加分的
最佳答案
  • 五星知识达人网友:躲不过心动
  • 2021-04-04 02:24



你去看百度百科的C代码吧
解释挺清楚的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯