博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nqueens java_Matlab NQueens算法递归
阅读量:5108 次
发布时间:2019-06-13

本文共 1558 字,大约阅读时间需要 5 分钟。

对于作业,我的任务是使用Matlab和递归设计NQueens算法 . 所以我设置它的方式是我有2个辅助函数isValid,它测试有效放置,recursiveQueen,它从0的MxM板放置或删除一个女王,并从每个可能的移动中添加一个或删除1可以使 . 为了节省空间,我从recursiveQueen函数中删除了add函数,但它只是在8个方向上加1或减1 .

我遇到的主要问题是在我的solveNQ函数中,如果找不到前一行的解,则将其转到下一列 . 我已经把我的步骤分解为6件事:

1)在第一行放置一个女王

2)将一个女王放在下一行的下一个有效位置

3)重复步骤2,直到找不到行的有效位置

4)从最后一行删除女王

5)将女王放在行的下一个有效位置

6)重复步骤1-5,直到所有行都包含一个女王(我没有编写此步骤)

function out = NQueens(m) %main function

board = zeros(m,m); %intializes board

out = solveNQ(1,board) %recursive function

end

function out = solveNQ(col,board)

n = length(board);

out = false; %returns false if no solutions found

if col > n

else

for i = col:n

for j = 1:n

if isValid(board,i,j)

board = recursiveQueen(board,i,j,'place') %place queen

out = solveNQ(col+1,board) %recursive call

end

end

board = recursiveQueen(board,i-1,col,'remove') %if no valid placement for row

out = solveNQ(col-1,board) %try again

end

end

end

function out = isValid(board,row,col)

if board(row,col) == 0

out = true;

else

out = false;

end

function board = recursiveQueen(board,row,col,move)

board = goRight(board,row,col,move); %right

board = goLeft(board,row,col,move); %left

board = goDown(board,row,col,move); %down

board = goUp(board,row,col,move); %up

board = goRightUp(board,row,col,move); %diagnol up right

board = goLeftUp(board,row,col,move); %diagnol up left

board = goRightDown(board,row,col,move); %diagnol right down

board = goLeftDown(board,row,col,move); %diagnol left down

if strcmp(move,'place') %places queen

board(row,col) = -1;

elseif strcmp(move,'remove') %removes queen

board(row,col) = 0;

end

end

转载地址:http://fqjdv.baihongyu.com/

你可能感兴趣的文章
在Eclipse中调试web项目
查看>>
selenium webdriver(1)—浏览器操作
查看>>
[转] Ansible 系列之 Playbooks 剧本
查看>>
Nginx源码完全注释(3)ngx_list.h / ngx_list.c
查看>>
给DeDeCms栏目增加缩略图功能
查看>>
软件工程实验二图
查看>>
Usaco2008 Jan
查看>>
django总结
查看>>
kendo-ui的使用和开发自己的组件
查看>>
OOD设计原则之开闭原则(OCP)
查看>>
Safari Private 模式下 localStorage 的问题
查看>>
FIND
查看>>
terminal 总结
查看>>
UI流程总结
查看>>
读取字节流文件并复制
查看>>
NOIp知识点复习——最短路计数
查看>>
删除 重复行数据
查看>>
使用Visual Studio 开发SharePoint项目时的快捷键
查看>>
【卷积】图像分块与卷积特征提取与自然图像静态统计特性
查看>>
图像分块测试记录(还不对)
查看>>