作业6_4_4
using namespace std;
#include <iostream>
#include <fstream.h>
const int maxn=6;
int n,map[maxn][maxn],cover[maxn],link[maxn];
void init()
{
ifstream fin("input.txt");
int i,j;
fin>>n;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
fin>>map[j];
fin.close();
}
int find(int p)
{
int k,q;
for (k=0;k<n;k++)
if ((map[p][k]==1)&&(cover[k]==0))
{
q=link[k];
link[k]=p;
cover[k]=1;
if ((q==-1)||(find(q)==1)) return 1;
link[k]=q;
}
return 0;
}
void print()
{
ofstream fout("output.txt");
int i,s=0;
for (i=0;i<n;i++)
if (link!=-1) s++;
if (s!=n) fout<<"No solution!"<<endl;
else {
for (i=0;i<n;i++)
fout<<link+1<<" "<<i+1<<endl;
}
fout.close();
}
main()
{
init();
int i,p;
for (i=0;i<n;i++) link=-1;
for (i=0;i<n;i++)
{
for (p=0;p<n;p++)
cover[p]=0;
find(i);
}
print();
return 0;
} |