桥本分数。将1,2,3,4,5,6,7,8,9填入如下图的9个方格中,使得等式成立(要求不得重复)。
用回溯法设计求解桥本分数的算法。
输入格式:
整数n(n<=10)
输出格式:
按照字典序,输出前n个等式
输入样例:
在这里给出一组输入。例如:
1
输出样例:
在这里给出相应的输出。例如:
1/26+5/78=4/39
#include<iostream>
using namespace std;
int n=9,vis[10],n1;
int ans[10];
void dfs(int root,int level)
{
ans[level]=root;
vis[root]=1;
if(level==n)
{
if(n1==0) return;
int num1=ans[2]*10+ans[3],num2=ans[5]*10+ans[6],num3=ans[8]*10+ans[9];
int sum=ans[1]*num2*num3+ans[4]*num1*num3-ans[7]*num1*num2;
if(sum==0)
{
n1--;
cout<<ans[1]<<"/"<<ans[2]<<ans[3]<<"+"<<ans[4]<<"/"<<ans[5]<<ans[6]<<"="<<ans[7]<<"/"<<ans[8]<<ans[9]<<endl;
}
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
dfs(i,level+1);
vis[i]=0;
}
}
}
int main()
{
cin>>n1;
for(int i=1;i<=n;i++)
{
fill(vis,vis+10,0);
fill(ans,ans+10,0);
dfs(i,1);
}
}