国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

皇后問題之C#版(非遞歸)

2024-07-21 02:17:31
字體:
來源:轉載
供稿:網友
 

/*
 *author:junyi sun @ccnu
* e-mail:[email protected]
*/

using system;
namespace sunjoy
{
    public class queen
    {
        public static int main()
        {
            int board_size = 0,x=0,y=0;//棋盤大小,當前行,當前列
            uint solution_count = 0;   //皇后擺放方案的個數
            int[] rows, cols, slot1, slot2, x2y;//行占用情況,列占用情況,“/”狀斜線占用情況,“/”狀斜線占用情況,皇后坐標
            datetime t_start, t_end;
           
            console.writeline("請輸入棋盤的大小");
            try
            {
                board_size = convert.toint32(console.readline());
                if (board_size <= 0)
                {
                    console.writeline("非法數據");
                    return -1;
                }
            }
            catch (exception e) { console.writeline("發生異常" + e.message); };

            rows = new int[board_size];
            cols = new int[board_size];
            slot1 = new int[board_size * 2 - 1];
            slot2 = new int[board_size * 2 - 1];
            x2y = new int[board_size];

            for (int i = 0; i < board_size; i++)
                x2y[i] = -1;   //坐標初始化都為-1
            t_start = datetime.now;
            while (true)
            {
                for (y = x2y[x]+1; y < board_size; y++)
                    if (rows[x] == 0 && cols[y] == 0 && slot1[x + y] == 0 && slot2[x - y + board_size - 1] == 0)
                        break;

                if (y < board_size)
                {
                    //第x行的棋子落下
                    rows[x] = 1; cols[y] = 1; slot1[x + y] = 1; slot2[x - y + board_size - 1] = 1; x2y[x] = y;
                }  
                else
                {
                    //回溯,拿起棋子
                    if (x > 0)
                    {
                        x2y[x] = -1;
                        x--;
                        rows[x] = 0; cols[x2y[x]] = 0; slot1[x + x2y[x]] = 0; slot2[x - x2y[x] + board_size - 1] = 0;
                        continue;
                    }
                    else break;
                }
                if (x == board_size - 1)   //如果已經得到了一組解,即當最后一行棋子落定之時
                {
                    for (int i = 0; i < board_size; i++)
                    {
                        for (int j = 0; j < board_size; j++)
                        {
                            if (x2y[i] == j) console.write("q");
                            else console.write("■");
                        }
                        console.write("/n");
                       
                    }
                    console.write("/n");
                    solution_count++;   //總方案數加一
                    rows[x] = 0; cols[x2y[x]] = 0; slot1[x + x2y[x]] = 0; slot2[x - x2y[x] + board_size - 1] = 0;//放棄這一列

                }
                else
                {
                    x++;   //繼續處理下一行
                }
            }
            t_end = datetime.now;
            console.writeline("總共{0}組解",solution_count);
            console.writeline("計算及打印共用時間{0}秒",t_end-t_start);
            return 0;
        }
    }
}

___________________________________________________________

測試結果:
請輸入棋盤的大小
4
■q■■
■■■q
q■■■
■■q■

■■q■
q■■■
■■■q
■q■■

總共2組解
計算及打印共用時間00:00:00秒

_______________________________________________
請輸入棋盤的大小
6
■q■■■■
■■■q■■
■■■■■q
q■■■■■
■■q■■■
■■■■q■

■■q■■■
■■■■■q
■q■■■■
■■■■q■
q■■■■■
■■■q■■

■■■q■■
q■■■■■
■■■■q■
■q■■■■
■■■■■q
■■q■■■

■■■■q■
■■q■■■
q■■■■■
■■■■■q
■■■q■■
■q■■■■

總共4組解
計算及打印共用時間00:00:00.0156250秒


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆河县| 博兴县| 承德市| 盘锦市| 淮滨县| 高雄县| 裕民县| 崇明县| 察雅县| 略阳县| 大名县| 延川县| 河北省| 定西市| 双流县| 绥宁县| 东乡县| 新竹县| 卫辉市| 昌吉市| 砚山县| 灯塔市| 大宁县| 布拖县| 康保县| 镇巴县| 巫山县| 建始县| 乐昌市| 江源县| 陈巴尔虎旗| 任丘市| 雅江县| 大埔县| 乌兰县| 巢湖市| 玉林市| 紫金县| 昆山市| 准格尔旗| 西华县|