数学建模社区-数学中国

标题: 循环返回上一步怎么做(不懂悬赏,承诺30体力) [打印本页]

作者: chqk921    时间: 2012-7-25 11:30
标题: 循环返回上一步怎么做(不懂悬赏,承诺30体力)
本帖最后由 chqk921 于 2012-7-25 19:48 编辑

for i=1:9
    for j=1:9   
        if x(i,j)~=0
            return;
        else
        a=S(i,j).zhi;
            for t=1:length(a)                 %位置(1),X取另外不同的数。如果X(i,j)的位置取完了,还是不满足isempty(find(X==0)) ,返回上一个X(i,j)%         
             X(i,j)=a(t);
            S=possiblevalue(X);             %这里是对每个X可以取到的值改变               
   if isempty(find(X==0))      %如果X里面没有0,则保存X并退出,如果有,返回到(1)的位置                                     
                save X;
                else
                    return;
                end
            end
   end
end
end      
这里想做个递归,X矩阵中有0也有一直数,已知数不可改变,通过possiblevalue这个规则使得X中0取满。比如X(4,5)取了一个值后,X(4,6)无法再取值,则让X(4,5)再可取值内改变,若还是不可让后续的X取到值,则再次向前改变比如X(4,3)的值

另外,这个是在matlab环境下运行的
作者: 高丽坤    时间: 2012-7-25 16:46
你的意思是指在循环中再嵌套一个循环吧,下面是我写的,添了一些东西(b),不知道有没有用
for i=1:9
     for j=1:9   
         if x(i,j)~=0
             return;
         else
         a=S(i,j).zhi;
       int  b=1;
       while(b=1)
          {
             for t=1:length(a)                 %位置(1),X取另外不同的数。如果X(i,j)的位置取完了,还是不满足isempty(find(X==0)) ,返回上一个X(i,j)%         
             X(i,j)=a(t);
             S=possiblevalue(X);             %这里是对每个X可以取到的值改变               
   if isempty(find(X==0))      %如果X里面没有0,则保存X并退出,如果有,返回到(1)的位置                                    
                 save X;
                 b=0;%跳出循环
                 else
                 b=1;%接着循环
           }
                 end
             end
作者: 高丽坤    时间: 2012-7-25 16:49
goto 语句为无条件转向语句,要用到标号,
goto 标号;
......
标号:语句;
这个应该可以用,可以尝试,不过貌似不提倡
作者: chqk921    时间: 2012-7-25 19:45
高丽坤 发表于 2012-7-25 16:46
你的意思是指在循环中再嵌套一个循环吧,下面是我写的,添了一些东西(b),不知道有没有用
for i=1:9
   ...

这里想做个递归,X矩阵中有0也有一直数,已知数不可改变,通过possiblevalue这个规则使得X中0取满。比如X(4,5)取了一个值后,X(4,6)无法再取值,则让X(4,5)再可取值内改变,若还是不可让后续的X取到值,则再次向前改变比如X(4,3)的值




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5