青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
C大調(diào)如歌的行板
我也來發(fā)明山楂車輪
C++博客
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆 - 32 文章 - 94 trackbacks - 0
<
2009年6月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用鏈接
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(8)
給我留言
查看公開留言
查看私人留言
隨筆分類
C++(4)
鋼琴(8)
其他(9)
算法(6)
圖形學(xué)(13)
游戲編程(9)
隨筆檔案
2014年2月 (1)
2013年11月 (1)
2013年5月 (1)
2013年1月 (1)
2012年12月 (1)
2012年11月 (1)
2012年8月 (1)
2012年2月 (2)
2011年10月 (1)
2011年5月 (1)
2011年4月 (2)
2011年3月 (1)
2010年12月 (1)
2010年6月 (1)
2010年2月 (1)
2010年1月 (4)
2009年10月 (3)
2009年9月 (1)
2009年8月 (2)
2009年7月 (2)
2009年6月 (3)
好友連接
大學(xué)同班大牛人CK
大學(xué)同宿大牛人vczh
搜索
最新評(píng)論
1.?re: 之前做的LOD動(dòng)態(tài)地形
@kk
沒錯(cuò)啊,直接在vs里面依據(jù)高度圖重新計(jì)算頂點(diǎn)高度
--陳昱(CY)
2.?re: 之前做的LOD動(dòng)態(tài)地形[未登錄]
大神,何詠說的“一般都是分塊之后直接在GPU上面搞Displacement ”,什么是Displacement啊。Displacemen mapping 么?
--kk
3.?re: 肖邦練習(xí)曲《離別》
多去鋼琴有關(guān)的論壇交流~@溪流
--陳昱(CY)
4.?re: 肖邦練習(xí)曲《離別》
@陳昱(CY)
仰慕~~
拜厄前50條水平,有空請(qǐng)多多指教!
--溪流
5.?re: 肖邦練習(xí)曲《離別》
鋼琴年齡比編程還長(zhǎng)好多的說~~@溪流
--陳昱(CY)
閱讀排行榜
1.?shader toy 上練習(xí),畫了個(gè)baby grand piano(4852)
2.?喬治·溫斯頓的C大調(diào)《卡農(nóng)》(3413)
3.?(原創(chuàng))宇宙10個(gè)維度的一句話理解(3402)
4.?肖邦練習(xí)曲《牧羊人的笛子》(3365)
5.?李斯特《愛之夢(mèng)》(3291)
評(píng)論排行榜
1.?之前做的LOD動(dòng)態(tài)地形(10)
2.?多點(diǎn)觸摸的GUI?(10)
3.?一個(gè)想法,實(shí)現(xiàn)n維超級(jí)立方體!!!初步成功!!!(第二章)(9)
4.?一個(gè)想法,實(shí)習(xí)n維立方體!!! (結(jié)束)(9)
5.?一個(gè)想法,用程序畫出高維超立方體在三維上的投影!!!(1)(8)
以前寫的一個(gè)N連看
這一周,我寫好了一個(gè)連連看,在設(shè)計(jì)連連看的算法的過程中,我設(shè)計(jì)了一個(gè)可以控制連數(shù)的連連看算法,并把連連看改成了“
n
連看”,然后經(jīng)過算法優(yōu)化,使我的連連看算法在
20
連、無解、矩陣是
13*11
、最壞情況(一個(gè)周圍空曠,一個(gè)被包圍)下,運(yùn)算速度僅
2
秒左右。而經(jīng)過優(yōu)化之前,到了
6
連的最壞情況下就已經(jīng)慢得無法接受了。
基本的算法是這樣的:
先寫一個(gè)函數(shù)
f1
,判斷點(diǎn)
1
和點(diǎn)
2
能否經(jīng)過某個(gè)方向直線到達(dá),方向有上、下、左、右四種
再寫一個(gè)函數(shù)
f2
用于循環(huán)遞歸調(diào)用
f1
,思路是:如果起始點(diǎn)通過直線到達(dá)不了目標(biāo)點(diǎn),就把起始點(diǎn)可以直線到達(dá)的每個(gè)點(diǎn)當(dāng)成下一次調(diào)用的起始點(diǎn),直到找到目標(biāo)點(diǎn)就立即返回。
f2
的參數(shù)包括:
n
連:用來控制遞歸深度;
2
個(gè)點(diǎn)(起始點(diǎn)和目標(biāo)點(diǎn)),用來判斷能夠經(jīng)過
n
連連接的
2
個(gè)點(diǎn);
判斷當(dāng)前是“上下”或“左右”方向:由于某個(gè)點(diǎn)尋找目標(biāo)點(diǎn)時(shí),我引進(jìn)了行走方向,這樣可以節(jié)省一半的計(jì)算量。例如:如果當(dāng)前方向是“上下”,直線找不到時(shí),下一步遞歸對(duì)直線上的每個(gè)點(diǎn)的尋找,就只需要“左右”方向,不需要上下;
路徑記錄的列表。
以上是基本思路。
我的算法優(yōu)化方法很簡(jiǎn)單,就是在原來基礎(chǔ)上加上一個(gè)對(duì)應(yīng)于所有點(diǎn)的數(shù)組,用來記錄對(duì)應(yīng)的點(diǎn)在第多少連的情況下仍然沒有找到目標(biāo)點(diǎn)。例如:假設(shè)總共只能
n
連,當(dāng)前點(diǎn)已經(jīng)被記錄到經(jīng)過
x
連仍然找不到目標(biāo)點(diǎn),這時(shí),如果繼續(xù)遞歸到第
n-x+1
連又來到該點(diǎn),這時(shí)只剩下
x-1
連可以遞歸,而當(dāng)前點(diǎn)已經(jīng)記錄過
x
連都無法到達(dá),所以接下來的遞歸可以忽略。
這樣,大大減少了無效的計(jì)算,原來在第
6
連最壞情況下算了
40
多秒得到無解,現(xiàn)在可以在
20
連最壞情況下計(jì)算
2
秒得到無解。
那個(gè)n連看的算法當(dāng)時(shí)用一天寫出來,非常興奮。無奈電腦是內(nèi)網(wǎng),要保密,不能把代碼直接傳出來,之前想過有時(shí)間要貼出來,一直忘記了。現(xiàn)在在轉(zhuǎn)到這個(gè)新開的blog。
只貼算法有關(guān)部分。用的是python語言:
1
class
CY_LianlianKan(
..):
2
def
__init__
(self):
3
self.m_Array
=
[]
#
存儲(chǔ)內(nèi)容的矩陣
4
self.m_LinkCount
=
0
#
需要連的總數(shù)
5
self.m_FirstPosition
=-
1
#
記下連的第一點(diǎn)
6
self.MaxWidth
=
13
#
矩陣寬
7
self.MaxHeight
=
12
#
矩陣高
8
#
其它初始化內(nèi)容
9
#
----------------------------------
10
def
IsTargetXYValid(self,X,Y):
11
#
目標(biāo)坐標(biāo)是否有效,超過矩陣寬高即無效
12
#
----------------------------------
13
def
IsTargetXYBlank(self,X,Y):
14
#
目標(biāo)是否空白可以通過
15
#
----------------------------------
16
def
GetArrayXY(self,X,Y):
17
#
獲取矩陣坐標(biāo)為XY的內(nèi)容
18
#
----------------------------------
19
def
IsLineable(self,x1,y1,x2,y2,direction):
#
判斷兩點(diǎn)是否可以通過某方向直線連接
20
#
方向direction:1←2→3↑4↓
21
if
direction
==
1
:
22
if
y1
==
y2
and
x1
>
x2:
23
for
i
in
xrange(x2,x1
+
1
):
24
if
self.GetArrayXY(i,y1)
>
0:
25
return
False
26
return
True
27
elif
direction
==
2
:
28
if
y1
==
y2
and
x1
<
x2:
29
for
i
in
xrange(x1,x2
+
1
):
30
if
self.GetArrayXY(i,y1)
>
0:
31
return
False
32
return
True
33
elif
direction
==
3
:
34
if
x1
==
x2
and
y1
<
y2:
35
for
i
in
xrange(y1,y2
+
1
):
36
if
self.GetArrayXY(x1,i)
>
0:
37
return
False
38
return
True
39
elif
direction
==
4
:
40
if
x1
==
x2
and
y2
<
y1:
41
for
i
in
xrange(y2,y1
+
1
):
42
if
self.GetArrayXY(x1,i)
>
0:
43
return
False
44
return
True
45
return
False
46
#
---------------------------------------
47
def
IsNTurnReachable(self,x1,y1,x2,y2,path,n,LRorUD,hasReachPoint):
48
#
path成功時(shí)用于記錄路徑 n當(dāng)前剩下的連數(shù) LRorUD當(dāng)前方向是上下還是左右
49
#
hasReachPoint 一個(gè)矩陣,用于記錄矩陣中各個(gè)點(diǎn)目前已經(jīng)經(jīng)過多少連了還找不到目標(biāo)點(diǎn)
50
if
n
<=
0:
51
return
False
52
if
LRorUD:
#
左右方向
53
for
x
in
xrange(x1
-
1
,
-
1
,
-
1
):
#
向左
54
if
self.GetArrayXY(x,y1)
==
0
and
hasReachPoint[y1
*
self.MaxWidth
+
x]
<
n:
55
if
self.IsLineable(x,y1,x2,y2,
3
)
or
self.IsLinable(x,y1,x2,y2,
4
):
56
path
+=
[x,y1,x2,y2]
57
return
path
58
else
:
#
到達(dá)不了,上下轉(zhuǎn)彎,遞歸
59
hasReachPoint[y1
*
self.MaxWidth
+
x]
+=
1
60
p
=
self.IsNTurnReachable(x,y1,x2,y2,path
+
[x,y1],n
-
1
,False,hasReachPoint)
61
if
p
!=
False:
62
return
p
63
else
:
64
break
65
for
x
in
xrange(x1
+
1
,self.MaxWidth):
#
向右
66
if
self.GetArrayXY(x,y1)
==
0
and
hasReachPoint[y1
*
self.MaxWidth
+
x]
<
n:
67
if
self.IsLineable(x,y1,x2,y2,
3
)
or
self.IsLineable(x,y1,x2,y2,
4
):
68
path
+=
[x,y1,x2,y2]
69
return
path
70
else
:
#
到達(dá)不了,上下轉(zhuǎn)彎,遞歸
71
hasReachPoint[y1
*
self.MaxWidth
+
x]
+=
1
72
p
=
self.IsNTurnReachable(x,y1,x2,y2,path
+
[x,y1],n
-
1
,False,hasReachPoint)
73
if
p
!=
False:
74
return
p
75
else
:
76
break
77
else
:
#
上下移動(dòng)
78
for
y
in
xrange(y1
-
1
,
-
1
,
-
1
):
#
向上
79
if
self.GetArrayXY(x1,y)
==
0
and
hasReachPoint[y
*
self.MaxWidth
+
x1]
<
n:
80
if
self.IsLineable(x1,y,x2,y2,
1
)
or
self.IsLineable(x1,y,x2,y2,
2
):
81
path
+=
[x1,y,x2,y2]
82
return
path
83
else
:
#
到達(dá)不了,左右轉(zhuǎn)彎,遞歸
84
hasReachPoint[y
*
self.MaxWidth
+
x1]
+=
1
85
p
=
self.IsNTurnReachable(x1,y,x2,y2,path
+
[x1,y],n
-
1
,True,hasReachPoint)
86
if
p
!=
False:
87
return
p
88
else
:
89
break
90
for
y
in
xrange(y1
+
1
,self.MaxHeight):
#
向下
91
if
self.GetArrayXY(x1,y)
==
0
and
hasReachPoint[y
*
self.MaxWidth
+
x1]
<
n:
92
if
self.IsLineable(x1,y,x2,y2,
1
)
or
self.IsLineable(x1,y,x2,y2,
2
):
93
path
+=
[x1,y,x2,y2]
94
return
path
95
else
:
#
到達(dá)不了,左右轉(zhuǎn)彎,遞歸
96
hasReachPoint[y
*
self.MaxWidth
+
x1]
+=
1
97
p
=
self.IsNTurnReachable(x1,y,x2,y2,path
+
[x1,y],n
-
1
,True,hasReachPoint)
98
if
p
!=
False:
99
return
p
100
else
:
101
break
102
return
False
103
#
--------------------------------------------------------
104
def
IsLinkAble(self,x1,y1,x2,y2,n):
#
n連看的計(jì)算函數(shù)
105
if
n
<=
0:
106
return
False
107
hasReachPoint
=
[0]
*
(self.MaxWidth
*
self.MaxHeight)
108
for
i
in
[0,
1
,
2
,
3
]:
109
if
self.isLineable(x1,y1,x2,y2,i):
110
path
=
[x1,y1,x2,y2]
111
return
path
112
path
=
[x1,y1]
113
p
=
self.IsNTurnReachalbe(x1,y1,x2,y2,path,n
-
1
,False,hasReachPoint)
114
if
p:
115
return
p
116
p
=
self.IsNTurnReachalbe(x1,y1,x2,y2,path,n
-
1
,True,hasReachPoint)
117
if
p:
118
return
p
119
return
False
當(dāng)然,現(xiàn)在想到還有可以繼續(xù)優(yōu)化的地方,例如尋路時(shí),從起點(diǎn)和目標(biāo)點(diǎn)同時(shí)出發(fā)尋路,而不是只從一個(gè)點(diǎn)出發(fā)尋路。這樣做或許還可以雙線程優(yōu)化,不過具體做法就沒有細(xì)想了。
posted on 2009-06-28 19:50
陳昱(CY)
閱讀(1622)
評(píng)論(2)
編輯
收藏
引用
所屬分類:
算法
FeedBack:
#
re: 以前寫的一個(gè)N連看 2009-06-29 23:15
小卒
我最近想寫個(gè)立體數(shù)獨(dú),不過理論功底不行……
回復(fù)
更多評(píng)論
#
re: 以前寫的一個(gè)N連看
2009-06-30 09:34
CY
那還要先證明立體數(shù)獨(dú)需要用多少個(gè)候選數(shù)
回復(fù)
更多評(píng)論
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
某人水題一道
shader的小奏鳴曲
一個(gè)想法,實(shí)習(xí)n維立方體!!! (結(jié)束)
一個(gè)想法,實(shí)現(xiàn)n維超級(jí)立方體!!!初步成功!!!(第二章)
一個(gè)想法,用程序畫出高維超立方體在三維上的投影!!!(1)
以前寫的一個(gè)N連看
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Copyright ©2025 陳昱(CY) Powered by:
博客園
模板提供:
滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
亚洲人线精品午夜
|
亚洲欧美综合一区
|
亚洲综合清纯丝袜自拍
|
亚洲午夜视频在线
|
欧美午夜激情视频
|
亚洲女性裸体视频
|
亚洲清纯自拍
|
久久九九国产精品
|
噜噜噜91成人网
|
亚洲日本aⅴ片在线观看香蕉
|
精品成人乱色一区二区
|
久久五月激情
|
99精品视频一区
|
亚洲欧美综合另类中字
|
性欧美video另类hd性玩具
|
免费短视频成人日韩
|
正在播放亚洲一区
|
在线成人www免费观看视频
|
欧美日韩高清在线观看
|
欧美一级大片在线观看
|
亚洲国产欧美另类丝袜
|
亚洲性av在线
|
午夜精品久久久久久久99热浪潮
|
激情自拍一区
|
亚洲国产精品一区二区久
|
老司机免费视频久久
|
亚洲大片在线观看
|
久久视频在线视频
|
亚洲九九九在线观看
|
国产婷婷色一区二区三区
|
中文在线一区
|
亚洲欧美日韩中文视频
|
国产精品捆绑调教
|
亚洲国产99
|
黄色成人在线观看
|
国产欧美成人
|
国产精品国产三级欧美二区
|
欧美激情视频一区二区三区在线播放
|
久久久久久久久久久成人
|
午夜日韩视频
|
欧美日韩网址
|
国产精品久久久久77777
|
伊人成人开心激情综合网
|
亚洲制服av
|
午夜精品久久久久久久久
|
欧美电影免费观看高清完整版
|
久久久另类综合
|
欧美怡红院视频一区二区三区
|
亚洲婷婷综合久久一本伊一区
|
久久亚洲国产成人
|
亚洲欧美一区二区精品久久久
|
这里是久久伊人
|
美女视频一区免费观看
|
久久精品免费
|
国产欧美日韩亚州综合
|
亚洲午夜一区二区三区
|
亚洲精品中文字幕有码专区
|
日韩亚洲精品在线
|
亚洲欧美日韩另类精品一区二区三区
|
欧美精品久久99
|
亚洲人午夜精品免费
|
欧美成人高清视频
|
日韩一区二区精品视频
|
欧美激情亚洲另类
|
亚洲日本va午夜在线电影
|
欧美激情一区三区
|
亚洲最新中文字幕
|
欧美日韩三区
|
亚洲男人的天堂在线aⅴ视频
|
一本色道久久综合
|
欧美在线影院
|
欧美高清视频一区二区
|
欧美日韩在线观看视频
|
日韩视频一区二区三区
|
亚洲精品一区二区在线
|
欧美精品免费在线
|
亚洲一区二区伦理
|
亚洲一区免费视频
|
欧美一区二区精品久久911
|
欧美主播一区二区三区
|
亚洲精选中文字幕
|
亚洲国产欧美日韩
|
欧美日本亚洲
|
亚洲第一精品福利
|
亚洲免费视频一区二区
|
中文成人激情娱乐网
|
国产伦精品一区二区三区视频孕妇
|
在线播放一区
|
亚洲第一成人在线
|
欧美日韩高清在线观看
|
久久国产精品99久久久久久老狼
|
久久成人羞羞网站
|
国产精品久久久久久久久久ktv
|
欧美亚洲一区
|
亚洲美女中文字幕
|
国产精品亚洲欧美
|
一本久道久久综合婷婷鲸鱼
|
久久精品国产99
|
9i看片成人免费高清
|
国产精品亚洲激情
|
欧美成年人视频网站
|
欧美日韩精品国产
|
久久综合网色—综合色88
|
欧美全黄视频
|
久久免费黄色
|
欧美日韩在线第一页
|
免费在线日韩av
|
欧美成人激情在线
|
亚洲国产精品成人va在线观看
|
亚洲精选视频免费看
|
激情成人亚洲
|
亚洲免费综合
|
亚洲欧洲一区二区三区久久
|
亚洲欧美日韩天堂一区二区
|
日韩一级大片在线
|
99国产精品视频免费观看一公开
|
欧美另类变人与禽xxxxx
|
欧美一区二区三区日韩视频
|
欧美精品成人
|
欧美成人自拍视频
|
国产婷婷成人久久av免费高清
|
亚洲伦理久久
|
亚洲精品国产精品久久清纯直播
|
久久婷婷激情
|
国产精品久久久久7777婷婷
|
亚洲高清自拍
|
美国十次成人
|
久久综合色影院
|
一区二区亚洲欧洲国产日韩
|
亚洲一区二区三区在线观看视频
|
一区二区三区免费看
|
一区二区三欧美
|
欧美成人免费视频
|
欧美高清视频一二三区
|
在线观看福利一区
|
久久久视频精品
|
毛片精品免费在线观看
|
狠狠网亚洲精品
|
欧美在线视频a
|
久久免费视频在线观看
|
国产一区二区成人
|
麻豆精品精华液
|
欧美在线视频一区
|
国产欧美日韩一区二区三区
|
日韩亚洲国产精品
|
亚洲一区二区免费视频
|
国产精品裸体一区二区三区
|
一区二区三区日韩精品
|
亚洲伊人第一页
|
国产精品亚洲综合
|
欧美在线免费
|
欧美电影电视剧在线观看
|
亚洲精品日产精品乱码不卡
|
欧美高清在线
|
在线视频中文亚洲
|
欧美在线影院在线视频
|
国产婷婷97碰碰久久人人蜜臀
|
久久精品国产99国产精品澳门
|
欧美激情bt
|
亚洲一区影院
|
国内精品久久久久国产盗摄免费观看完整版
|
欧美高清不卡在线
|
一区二区三区国产在线
|
欧美视频一区在线
|
亚洲精品在线观
|
亚洲欧美国产va在线影院
|
国产日韩一区
|
久久影视三级福利片
|
欧美一区国产二区
|
伊人成人在线视频
|
欧美理论视频
|
篠田优中文在线播放第一区
|
欧美高清在线
|
欧美在线二区
|
亚洲精品国精品久久99热
|
国产精品国产三级国产aⅴ无密码
|
亚洲欧美综合网
|
亚洲高清在线精品
|
亚洲免费人成在线视频观看
|
国产偷国产偷亚洲高清97cao
|
欧美成人a∨高清免费观看
|
亚洲欧美韩国
|
亚洲久久一区二区
|
久久免费精品视频
|
亚洲一区二区免费看
|
伊人久久大香线
|
欧美手机在线视频
|
欧美电影打屁股sp
|
久久久精品欧美丰满
|
一区二区三区精品久久久
|
欧美成人一区二区三区
|
欧美一级播放
|
99pao成人国产永久免费视频
|
国产视频一区在线
|
国产精品看片资源
|
国产精品99免视看9
|
欧美精品久久久久久久久老牛影院
|
在线观看欧美激情
|
国产情人节一区
|
国产精品高潮呻吟久久
|