第1次实验——NPC问题(回溯算法、聚类分析)

一:回溯问题,八皇后问题。

#include "iostream" 
#define max 100 
using namespace std; 
bool unguarded(int A[],int m) 
{ 
    int n;  
    for(n=0;n<m;n++)
	{  
        if((A[n]==A[m])||((A[n]+n)==(A[m]+m))||((A[n]-n)==(A[m]-m))||((n -A[n])==(m-A[m]))) 
 
        return false;  
	} 
    return true; 
} 
int main() 
{  
    int n,i,A[max],s=1; 
    cout<<"请输入皇后的个数"<<endl; 
    cin>>n;  
    if((n<=3)||(n>=100)) 
    cout<<"请不要输入1、2、3或者大于100的数!"<<endl;//一个没有意义,两个和三个不管怎么放都会在同一行和同一列 
    else
	{  
        for(i=0;i<n;i++) A[i]=0;//先把每个皇后放在第一列,然后按行检察 
        i=0;//然后从第零行开始 
        while(i>=0) //回溯结束的条件 
		{    
            if(A[i]<=n-1) //当前行数的前边的每一行都要检查,从第零列检查到第n-1列  
			{//检测A[i]与A[0]~A[i-1]是否有冲突 
                if(!unguarded(A,i)) A[i]++;//设防,继续往下一列走
                else 
				{  
                    if(i<n-1) i++;//当i行不是最后一行的时候  
                    else //是最后一行的话输出皇后的摆放方式     
					{   
                        cout<<"第"<<s<<"个:"<<endl;     
                        for(int j=0;j<n;j++)
						{
							
                            for(int d=0;d<n;d++){ 
                            if(d!=A[j])      
                            cout<<'+'<<' ';       
                            else         
                            cout<<'@'<<' ';
							}       
                            cout<<endl;
						}       
                        s+=1;//记录已近有几种摆放方式 
						if(s>3)
						{
							break;
						}
						else{	
                        A[n-1]++;//继续向右走   
						}
					}
				}
			}     
            else {//当某一行全检查完了还是没有皇后的位置,就得返回到前一行去,即回溯     
            A[i]=0; i--;//行数减一      
            if(i>=0) A[i]++;}//向后挪一个把前一行的皇后  
		}
	}  
 return 0; 
} 


二:聚类分析

1   设计问卷。调查每个学生每天的学习时间,玩游戏时间睡觉时间以及体育运动时间,调查学生每周参加各种活动的次数,还有学生的是否有短期和长期的目标。

2   对学生分类可以使学生更好的认识自己,看到自己的优缺点,给学生的发展提供帮助。

3   我属于迷茫无目标型。不知道自己的优缺点,不知道自己喜欢什么。我要尽快制定自己的目标,然后朝着目标努力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值