vb.net 求一算法

sanji09 2008-09-02 10:05:40
ABCD
││├│
│┤││
││┤│
│┤│┤
│┤││

1="│"

2="├"

3="┤"

遇到“2”或“3”就拐弯,“1”就向下走 最后结果如下


ABCD
││├│
│┤││
││┤│
│┤│┤
│┤││
BDCA

...全文
161 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanji09 2008-09-03
  • 打赏
  • 举报
回复
非常非常感谢blues_zhao_yang ,我的小程序终于搞定了。谢谢
blues_zhao_yang 2008-09-03
  • 打赏
  • 举报
回复
如果是这样的话我想就更清晰了,2下面必然有3,也就是说当前元素和下一个元素之间是连通的。



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s_start() As Char = New Char() {"A", "B", "C", "D"}
Dim s_operation(,) As Integer = {{1, 1, 2, 3}, {2, 3, 1, 1}, {1, 2, 3, 1}, {2, 3, 2, 3}, {2, 3, 1, 1}}
Dim s As Char
For i = 0 To 4 '循环5次,也就是路径里的5行
For j = 0 To 3 '循环4次,因为每行里有4个路径
If s_operation(i, j) = 2 Then '如果当前元素的值为2的话,那么下一个元素为3,说明当前元素和下一个元素是连通的,那么需要将他们互换位置
s = s_start(j + 1) '交换
s_start(j + 1) = s_start(j)
s_start(j) = s
Else
End If
Next
Next
TextBox1.Text = s_start
End Sub
sanji09 2008-09-03
  • 打赏
  • 举报
回复
又来麻烦blues了
我把要求理解错了

ABCD
││├┤
├┤││
│├┤│
├┤├┤
├┤││
BDCA
1123
2311
1231
2323
2311
这样才算连接,就是说每个2的后面都有3
循环去判断的话只要判断2就可以了,有2的话直接就到下一行
这样的循环应该怎样写呢,望赐教
yanlongwuhui 2008-09-03
  • 打赏
  • 举报
回复
有意思
blues_zhao_yang 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sanji09 的回复:]
ABCD
││├│
│┤││
││┤│
│┤│┤
│┤││
BDCA

以B为例
第一行第二个数是1(│) 就向下走,第二行第二个数是3(┤)向左走,到了第二行第一个数1(│),向下走到第三行,
第三行第一个数1(│),向下走,第四行第二个是3(┤)向右走,到第五行。 第五行第二个是3(┤)向右走。走到第五行第一个数
得出B

这里3(┤)和2(├)的作用就是桥,起到连接的作用

2楼的做法是不错,可如果…
[/Quote]

我认为你不能只以路径来判断,那样会让你逻辑混乱的,据我看其实就是数组元素的交换运算,遇到2,就和数组中的下一个元素交换位置;遇到3,就和数组中的上一个元素交换位置;拐弯的那地方每行看做一次交换,一共交换5次,如下:

ABCD
││├│
--------------------第一次交换:ABDC
│┤││
--------------------第二次交换:BADC
││┤│
--------------------第三次交换:BDAC
│┤│┤
--------------------第四次交换:DBCA
│┤││
--------------------第五次交换:BDCA


不知道这么说是否表明了我的意思?
cauhorse 2008-09-03
  • 打赏
  • 举报
回复
终于给绕明白了。。。
sanji09 2008-09-03
  • 打赏
  • 举报
回复
ABCD
││├│
│┤││
││┤│
│┤│┤
│┤││
BDCA

以B为例
第一行第二个数是1(│) 就向下走,第二行第二个数是3(┤)向左走,到了第二行第一个数1(│),向下走到第三行,
第三行第一个数1(│),向下走,第四行第二个是3(┤)向右走,到第五行。 第五行第二个是3(┤)向右走。走到第五行第一个数
得出B

这里3(┤)和2(├)的作用就是桥,起到连接的作用

2楼的做法是不错,可如果数组的大小变了,就不行了。
blues_zhao_yang 2008-09-02
  • 打赏
  • 举报
回复

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s_start() As Char = New Char() {"A", "B", "C", "D"}
Dim s_operation(,) As Integer = {{1, 1, 2, 1}, {1, 3, 1, 1}, {1, 1, 3, 1}, {1, 3, 1, 3}, {1, 3, 1, 1}}
Dim s As Char
For i = 0 To 4
For j = 0 To 3
If s_operation(i, j) = 2 Then
s = s_start(j + 1)
s_start(j + 1) = s_start(j)
s_start(j) = s
ElseIf s_operation(i, j) = 3 Then
s = s_start(j - 1)
s_start(j - 1) = s_start(j)
s_start(j) = s
Else
End If
Next
Next
TextBox1.Text = s_start
End Sub
linux_ch 2008-09-02
  • 打赏
  • 举报
回复
看的不是很明白!!!
wdgphc 2008-09-02
  • 打赏
  • 举报
回复
还是不明白.
ohd 2008-09-02
  • 打赏
  • 举报
回复
看明白了,呵呵,比较有意思,不知道这个要做什么用?
blues_zhao_yang 2008-09-02
  • 打赏
  • 举报
回复
这个算法说白了,就是遇到2,就和数组中的下一个元素交换位置
遇到3,就和数组中的上一个元素交换位置
拐弯的那地方每行看做一次交换,一共交换5次
yanlongwuhui 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 sanji09 的帖子:]
遇到“2”或“3”就拐弯,“1”就向下走 最后结果如下
ABCD
││├│
│┤││
││┤│
│┤│┤
│┤││
BDCA
[/Quote]
没明白怎么推出BDCA的

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧