伊莉討論區
標題:
期末作業囉))))
[打印本頁]
作者:
ook5002000
時間:
2009-5-26 12:46 AM
標題:
期末作業囉))))
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
tommy790506
時間:
2009-5-26 02:04 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
include
時間:
2009-5-26 03:03 AM
不管是3X3還是100X100甚至是1000X1000
難度都是一樣的吧......
作者:
yyyyman
時間:
2009-5-26 07:17 AM
這三題所用之方式都非常地相近
何不全都做出來交給老師
讓老師開心一下咧
作者:
cclamon
時間:
2009-5-26 10:18 AM
至少自己也動手做看看吧
無中生有 比 改程式 困難多
給你參考就=給你答案了說
作者:
幻想的夢境
時間:
2009-5-28 12:18 AM
你別鬧了
除非你程式很強
不然最好不要從最難的下手
因為你不一定寫的出來
寫不出來就沒有分
雖然難度跟分數呈正比
不過拿不到沒用
倒不如選一個真正會寫的
簡單一點的
分數雖然不高
但是至少有分~
作者:
theray
時間:
2009-5-28 09:28 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
include
時間:
2009-5-28 01:52 PM
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAPSIZE 10
#define BOOM 1
class Game
{
public:
Game();
void setBoom();
void showMap_();
void showMap();
void gameStart();
void open(int ,int );
private:
char map[MAPSIZE][MAPSIZE];
int mapMask[MAPSIZE][MAPSIZE];
};
int main()
{
Game *game = new Game();
game->showMap_();
game->gameStart();
return 0;
}
Game::Game()
{
int j,k,temp;
setBoom();
for(j = 0;j < MAPSIZE;j ++)
{
for(k = 0;k < MAPSIZE;k ++)
{
temp = 0;
if(map[j][k] != 'b')
{
if(j > 0 && map[j - 1][k] == 'b')
{
temp ++;
}
if(j > 0 && k > 0 && map[j - 1][k - 1] == 'b')
{
temp ++;
}
if(k > 0 && map[j][k - 1] == 'b')
{
temp ++;
}
if(j < MAPSIZE - 1 && k > 0 && map[j + 1][k - 1] == 'b')
{
temp ++;
}
if(j < MAPSIZE - 1 && map[j + 1][k] == 'b')
{
temp ++;
}
if(j < MAPSIZE - 1 && k < MAPSIZE - 1 && map[j + 1][k + 1] == 'b')
{
temp ++;
}
if(k < MAPSIZE - 1 && map[j][k + 1] == 'b')
{
temp ++;
}
if(j > 0 && k < MAPSIZE - 1 && map[j - 1][k + 1] == 'b')
{
temp ++;
}
map[j][k] = temp + '0';
}
}
}
memset(mapMask,0,sizeof(mapMask));
}
void Game::setBoom()
{
int j,k,l;
memset(map,0,sizeof(map));
srand(time(NULL));
for(j = 0;j < BOOM;j ++)
{
do
{
k = rand() % MAPSIZE;
l = rand() % MAPSIZE;
}while(map[k][l] != 0);
map[k][l] = 'b';
}
}
void Game::showMap_()
{
int j,k;
for(j = 0;j < MAPSIZE;j ++)
{
for(k = 0;k < MAPSIZE;k ++)
{
if(mapMask[j][k] == 0)
printf("%c",2);
else
printf("%c",map[j][k]);
}
printf("\n");
}
}
void Game::showMap()
{
int j,k;
for(j = 0;j < MAPSIZE;j ++)
{
for(k = 0;k < MAPSIZE;k ++)
{
printf("%c",map[j][k]);
}
printf("\n");
}
}
void Game::gameStart()
{
int j,k,temp;
while(1)
{
scanf("%d%d",&j,&k);
if(j < 0 || j > MAPSIZE - 1 || k < 0 || k > MAPSIZE - 1)
continue;
if(map[j][k] == 'b')
{
printf("you lose...\n");
exit(1);
}
else
{
open(j,k);
}
showMap_();
temp = 0;
for(j = 0;j < MAPSIZE;j ++)
for(k = 0;k < MAPSIZE;k ++)
if(mapMask[j][k] == 1)
temp ++;
if(temp + BOOM == MAPSIZE * MAPSIZE)
{
printf("you win...\n");
exit(1);
}
}
}
void Game::open(int j,int k)
{
if(mapMask[j][k] != 0)
return;
if(j >= 0 && k >= 0 && j < MAPSIZE && k < MAPSIZE)
mapMask[j][k] = 1;
if(map[j][k] == '0')
{
if(j > 0 && k > 0)
open(j - 1,k - 1);
if(k > 0)
open(j,k - 1);
if(j < MAPSIZE - 1 && k > 0)
open(j + 1,k - 1);
if(j < MAPSIZE - 1)
open(j + 1,k);
if(j < MAPSIZE - 1 && k < MAPSIZE - 1)
open(j + 1,k + 1);
if(k < MAPSIZE - 1)
open(j,k + 1);
if(j > 0 && k < MAPSIZE - 1)
open(j - 1,k + 1);
if(j > 0)
open(j - 1,k);
}
}
複製代碼
作者:
ook5002000
時間:
2009-5-29 02:46 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
goodbye_mylove
時間:
2009-5-29 03:16 PM
9#
ook5002000
一堆演算法的過程就是只有長而己
大多數的人都是了解演算法的作法和精華點
最後再實作成 code
不過你的作法是找到 code 之後,希望有人再依 code 解釋給你聽
似乎有些本末倒置..
如果你真的要用 google 的話
應該是先找八皇后問題的說明 以及其解決八皇后演算法的構想等等
而不是直接就找 code 過來看..
直接找 code 過來看的話.. 可能直接修明年的課會比較實際一點..
一些小意見而已.. 請參閱..
作者:
ook5002000
時間:
2009-5-29 03:37 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
yyyyman
時間:
2009-5-29 06:54 PM
使用回溯法去解八皇后問題,也就是搜尋所有可能的狀態
作者:
in_dependent_
時間:
2009-5-30 10:36 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
bruce2000
時間:
2009-5-30 11:14 AM
八個皇后
就先把第一子放在(1,1)的位置
把棋盤上不可放的點刪掉
放第二子在可放位
再把棋盤上不可放的點刪掉
一直下去
如果已無可放點
手中卻還有子
就倒回去把上一個子移到第二個可放位
直到所有子都放下
老鼠走迷宮
每次遇到岔路時都先走數字小的(大的也可)
如果遇到死路
就退回上一節點
走下一條
直到走到終點為止
歡迎光臨 伊莉討論區 (http://www.wahas.com/)
Powered by Discuz!