注册 登录
编程论坛 C++教室

n后问题,求个输出好看的格式,棋盘格式的最好,求帮助!

不玩虚的 发布于 2012-12-10 12:31, 471 次点击
#include <iostream>
using namespace std;
int count=0;
void Output(int n,int *a)
{    int **b;
    count++;
    int i;    b=new int *[n];
    cout<<"第"<<count<<"解:"<<endl;
    for(i=1;i<=n;i++)
    {b[i]=new int [n];
        b[i][a[i]]=1;
    }

    for(int s=1;s<=n;s++)
    {    int c=0;
        for(i=1;i<=n;i++)
        {    c++;
            
            if(b[s][i]==1)
                cout<<"*";
            else
                cout<<"O";
                if(c%n==0)
        cout<<endl;
        }

    }
}
bool find(int *a,int i,int k)
{ int j=1;
    while(j<k)
    {if((a[j]==i)||(abs(a[j]-i)==abs(j-k)))
        return false;
    j++;
    }
    return true;
}
void Quen(int k,int n,int *a)
{if(k>n)
    Output(n,a);
    else
        for(int i=1;i<=n;i++)
            if(find(a,i,k))
            {a[k]=i;
                Quen(k+1,n,a);
            }
}


int main()
{    int n;
    int *a;
    cout<<"皇后问题:"<<endl;
    cin>>n;
    a=new int [n];
    cout<<n<<"皇后问题求解如下:"<<endl;
    Quen(1,n,a);
    return 0;
}
1 回复
#2
qunxingw2012-12-12 20:42
#include <iostream>
using namespace std;
int count=0;
void Output(int n,int *a)
{    int **b;
    count++;
    int i;    b=new int *[n];
    cout<<"第"<<count<<"解:"<<endl;
     cout<<"------------------ "<<endl;
    for(i=1;i<=n;i++)
    {
        b[i]=new int [n];
        b[i][a[i]]=1;
    }
     
   
    for(int s=1;s<=n;s++)
    {    int c=0;
         cout<<"  ";
        for(i=1;i<=n;i++)
        {    c++;
         
            if(b[s][i]==1)
            {
                cout<<"★";
               
            }
            else
            {
            if((s+i)%2==0) cout<<"  ";

            else cout<<"■";
            }
               if(c%n==0)
        
        cout<<endl;
   
        }
   
           }
   
}
bool find(int *a,int i,int k)
{ int j=1;
    while(j<k)
    {if((a[j]==i)||(abs(a[j]-i)==abs(j-k)))
        return false;
    j++;
    }
    return true;
}
void Quen(int k,int n,int *a)
{if(k>n)
    Output(n,a);
    else
        for(int i=1;i<=n;i++)
            if(find(a,i,k))
            {a[k]=i;
                Quen(k+1,n,a);
            }
}


int main()
{    int n;
    int *a;
    cout<<"皇后问题:"<<endl;
    cin>>n;
    a=new int [n];
    cout<<n<<"皇后问题求解如下:"<<endl;
    Quen(1,n,a);
    return 0;
}


[ 本帖最后由 qunxingw 于 2012-12-12 20:52 编辑 ]
1