Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

å??六宫格匹é…?. (See related posts)

å??六宫格匹é…?.

   1  
   2  #include "stdafx.h"
   3  #include <iostream>
   4  #include "stdlib.h"
   5  #include <string>
   6  #include <fstream>
   7  using namespace std;
   8  /*
   9  å??六宫格匹é…?.
  10  æ•°å­—1-16.ç»„åæˆ¸º4*4的方å?—.覱‚横竖斜的数值都覛¸ç­‰
  11  */
  12  class Sixteen
  13  {
  14  public:
  15  	Sixteen();
  16  	void arrange(int left, int right); // 列出所有的排列
  17  	void swap(int& item1, int& item2);
  18  	void Check(); // 检查是å符åæä»¶
  19  	int CheckRow(int check_num); // 检查行
  20  	int CheckCol(int check_num); // 检查列
  21  	int CheckBias(int check_num);  // 检查斜线
  22  	void WriteLine(string what); // 打å结果
  23  	~Sixteen();
  24  private:
  25  	int ini_data[16];
  26  	int parsed_num;
  27  	ofstream SaveFile;
  28  	ofstream ResultFile;
  29  };
  30  
  31  Sixteen::Sixteen()
  32  {
  33  	//	ini_data = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  34  	for(int i = 1; i <= 16; i++)
  35  	{
  36  		ini_data[i-1] = i;
  37  	}
  38  
  39  	SaveFile.open("e:\\temp.txt");
  40  	ResultFile.open("e:\\result.txt");
  41  	parsed_num = 0;
  42  
  43  	int total_num = 1;
  44  	cout << "一共会有 ";
  45  	for(int i = 1; i < 16; i++)
  46  	{
  47  		total_num *= i;
  48  	}
  49  	cout << total_num << " 个排列需�处�" << endl;
  50  }
  51  
  52  Sixteen::~Sixteen()
  53  {
  54  	SaveFile.close();
  55  	ResultFile.close();
  56  }
  57  
  58  void Sixteen::swap(int& item1, int& item2)
  59  {
  60  	int temp = item1;
  61  	item1 = item2;
  62  	item2 = temp;
  63  }
  64  
  65  void Sixteen::arrange(int left, int right)
  66  {
  67  	if(parsed_num++ % 10000 == 0)
  68  	{
  69  		cout << "We Have parsed " << parsed_num << endl;
  70  	}
  71  
  72  	if(left == right)
  73  	{
  74  		for(int i=0;i<=right;i++)
  75  		{
  76  			SaveFile << ini_data[i] << " ";
  77  
  78  			Check();
  79  		}
  80  		SaveFile << endl;
  81  	}
  82  	else
  83  	{
  84  		for(int i=0;i<=right;i++)
  85  		{
  86  			swap(ini_data[left], ini_data[i]);
  87  			arrange(left+1, right);
  88  			swap(ini_data[i], ini_data[left]);
  89  		}
  90  	}
  91  };
  92  
  93  void Sixteen::Check()
  94  {
  95  	int value = 0;
  96  	int temp_value = ini_data[0] + ini_data[1] + ini_data[2] + ini_data[3];
  97  	if(CheckRow(temp_value) == 1) // 如果行检查了之å结果相å
  98  	{
  99  		WriteLine("行检查相�");
 100  		if(CheckCol(temp_value) == 1) // 如果列检查了之å结果相å
 101  		{
 102  			WriteLine("列检查相�");
 103  
 104  			if(CheckBias(temp_value) == 1) // 如果斜线检查了之å相å
 105  			{
 106  				WriteLine("三项检查完全符�");
 107  			}
 108  		}
 109  	}
 110  }
 111  
 112  void Sixteen::WriteLine(string memo)
 113  {
 114  	ResultFile << memo << endl;
 115  	for(int i = 0; i < 16; i++)
 116  	{
 117  		ResultFile << ini_data[i] << " ";
 118  		if((i+1) % 4 == 0)
 119  		{
 120  			ResultFile << endl;
 121  		}
 122  	}
 123  	ResultFile << endl;
 124  }
 125  
 126  int Sixteen::CheckRow(int temp_value)
 127  {
 128  	if(temp_value == ini_data[4] + ini_data[5] + ini_data[6] + ini_data[7])
 129  	{
 130  		if(temp_value == ini_data[8]+ini_data[9]+ini_data[10]+ini_data[11])
 131  		{
 132  			if(temp_value == ini_data[12]+ini_data[13]+ini_data[14]+ini_data[15])
 133  			{
 134  				return 1;
 135  			}
 136  		}
 137  	}
 138  
 139  	return 0;
 140  }
 141  
 142  int Sixteen::CheckCol(int temp_value)
 143  {
 144  	if(temp_value == ini_data[0] + ini_data[4] + ini_data[8] + ini_data[12])
 145  	{
 146  		if(temp_value == ini_data[1] + ini_data[5] + ini_data[9] + ini_data[13])
 147  		{
 148  			if(temp_value == ini_data[2] + ini_data[6] + ini_data[10] + ini_data[14])
 149  			{
 150  				if(temp_value == ini_data[3] + ini_data[7] + ini_data[11] + ini_data[15])
 151  				{
 152  					return 1;
 153  				}
 154  			}
 155  		}
 156  	}
 157  
 158  	return 0;
 159  }
 160  
 161  int Sixteen::CheckBias(int temp_value)
 162  {
 163  	if(temp_value == ini_data[0] + ini_data[5] + ini_data[10] + ini_data[15])
 164  	{
 165  		if(temp_value == ini_data[3] + ini_data[6] + ini_data[9] + ini_data[12])
 166  		{
 167  			return 1;
 168  		}
 169  	}
 170  
 171  	return 0;
 172  }
 173  
 174  int main()
 175  {
 176  	Sixteen* six = new Sixteen();
 177  	six->arrange(0,15);
 178  }

You need to create an account or log in to post comments to this site.


Click here to browse all 5562 code snippets

Related Posts