题目 :给出一张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数组是干什么的
回答好的话会加分的
求解试以下这个代码(就是匈牙利算法)
答案:1 悬赏:10 手机版
解决时间 2021-04-04 15:47
- 提问者网友:謫仙
- 2021-04-04 01:44
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-04-04 02:24
你去看百度百科的C代码吧
解释挺清楚的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯