亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1330 | 回復(fù): 4
打印 上一主題 下一主題

求一源程序 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2005-05-23 17:24 |只看該作者 |倒序瀏覽
問題描述
在給定大小的方格狀棋盤上, 將棋子”馬”放在指定的起始位置 , 棋子”馬” 的走子的規(guī)則為必須在棋盤上走”日”字; 從棋子”馬”的起始位置開始, 搜索出一條可行的路徑, 使得棋子”馬”能走遍棋盤上的所有落子點, 而且每個落子點只能走一次;

例如: 棋盤大小為5*5 , 棋子馬放的起始落子點為 ( 3 , 3 ) ; 算法需要搜索一條從位置( 3 , 3 ) 開始的一條包括從( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) … ( 5 , 1 ) , ( 5 , 2 ) , ( 5 , 3 ) , ( 5 , 4 ) , ( 5 , 5 ) 總共25個可以落子的全部位置



不是我不想寫,實在是不會,N多WARINGS 和ERRORS

郁悶  





幫幫忙哦

論壇徽章:
0
2 [報告]
發(fā)表于 2005-05-23 17:36 |只看該作者

求一源程序

用回溯算法或貪心算法
看精華貼
http://www.72891.cn/forum/viewtopic.php?t=437639

有源代碼。

論壇徽章:
0
3 [報告]
發(fā)表于 2005-05-24 20:56 |只看該作者

求一源程序

先謝啦,

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
4 [報告]
發(fā)表于 2005-05-24 21:17 |只看該作者

求一源程序

唉,以前寫的好好的。就防著這個時候可以馬上貼上來。硬盤一災(zāi),全丟了,人算比如天算啊。

論壇徽章:
0
5 [報告]
發(fā)表于 2005-05-25 01:56 |只看該作者

求一源程序

// 丟了還可以再寫, 5*5 太少了, 大一點才走得暢快.
// Dev-C
// console.cpp
// zerozero_nine@hotmail.com

#include <windows.h>;
using namespace std;

POINT screensize;
void clrscr()
{
        COORD coordScreen = { 0, 0 };
        DWORD cCharsWritten;
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        DWORD dwConSize;
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  
        GetConsoleScreenBufferInfo(hConsole, &csbi);
        dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
        screensize.x = csbi.dwSize.X;
        screensize.y = csbi.dwSize.Y;
        FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
        GetConsoleScreenBufferInfo(hConsole, &csbi);
        FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
        SetConsoleCursorPosition(hConsole, coordScreen);
}

void gotoxy(int x, int y)
{
        COORD point;
        if((x < 0 || x >; screensize.x) || (y < 0 || y >; screensize.y))
                return;
        point.X = x; point.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point);
}

// Knight.cpp
#include <iostream>;
#include <functional>;
#include <vector>;
#include <queue>;
#include <time.h>;
#include <conio.h>;
#include "console.h"
using namespace std;

#define MAX_COL 20
#define MAX_ROW 20
#define COL_OFFSET (80-MAX_COL*4)/2
#define ROW_OFFSET (24-MAX_COL)/2
#define BACK_TRACK 0
#define RUN_COMPLETE 1
#define USER_BREAK 2
#define ESC 0x1B

#define INTPAIR pair<int, int>;

class Smaller {
public:
        bool operator()(const INTPAIR & x, const INTPAIR &y) {
                double xf,xs, yf, ys;
                xf=x.first-(MAX_COL-1)/2.0;
                xs=x.second-(MAX_ROW-1)/2.0;
                yf=y.first-(MAX_COL-1)/2.0;
                ys=y.second-(MAX_ROW-1)/2.0;
                return xf*xf+xs*xs<yf*yf+ys*ys;
        }
};

typedef priority_queue<INTPAIR, vector<INTPAIR>;, Smaller>; INTPAIRPQ;

int chess_board[MAX_COL][MAX_ROW];
int directions[][2]={{-1,-2},{-2,-1},{-1,2},{-2,1},{1,-2},{2,-1},{1,2},{2,1}};

bool valid_position(INTPAIR p)
{
        if (p.first<0||p.first>;=MAX_COL||p.second<0||p.second>;=MAX_ROW) return false;
        return (chess_board[p.first][p.second]==0);
}

int add_knight(int col, int row, int kno)
{
INTPAIR pos;
INTPAIRPQ steps;
int rc;
        chess_board[col][row]=kno;
        gotoxy(col*4+COL_OFFSET, row+ROW_OFFSET);
        printf(" %03d",kno);
        if (kno==MAX_COL*MAX_ROW) return RUN_COMPLETE;
        if ((kbhit() && getch()==ESC)) return USER_BREAK;
        for (int i=0;i<8;i++) {
                pos=make_pair(col+directions[0],row+directions[1]);
                if (valid_position(pos)) steps.push(pos);
        }
        while (steps.size()>;0) {
                pos=steps.top();
                steps.pop();
                if (rc=add_knight(pos.first, pos.second,kno+1)) return rc;
        }
        chess_board[col][row]=0;
        gotoxy(col*4+COL_OFFSET, row+ROW_OFFSET);
        printf("    ";
        return BACK_TRACK;
}

int main()
{
        clrscr();
        fill_n((int *)chess_board,MAX_COL*MAX_ROW,(int)0);
        srand(time(0));
        int rc=add_knight(rand()%MAX_COL,rand()%MAX_ROW,1);
        if (rc==RUN_COMPLETE) getch();
    return EXIT_SUCCESS;
}
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP