📄 螺旋方阵--fevernova的博客.htm
字号:
style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>a<SUB>2,2</SUB> =
fun(a<SUB>1,1</SUB>, min, min, n)
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes">
</SPAN>a<SUB>i,j</SUB>=fun(a<SUB>2,2</SUB>, i-min+1, j-min+1, n-2*(min-1) )
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12pt; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体">我们可以根据上述原理,分别推导出<SPAN
lang=EN-US>i和j为其它取值范围时的min取值。根据上述递归公式,可以得到以下参考程序。
<P></SPAN></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体">#include
<stdio.h>
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体">#define
MIN(x,y)<SPAN style="mso-spacerun: yes"> </SPAN>(x>y) ? (y) : (x)
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体">fun
( int a11, int i, int j, int n)
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体">{
int min, a22;
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>if ( i==j && i<=1 ) return
a11;
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if ( i==j && i<=(n+1)/2)
return ( fun(a11,i-1,i-1,n)+4*(n-2*i+3) );
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-ALIGN: left; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if ( i==1 && j!=1 ) return
( a11+j-1 );
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-ALIGN: left; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if ( i!=1 && j==n ) return
( a11+n+i-2 );
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-ALIGN: left; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if ( i!=1 && j==1 ) return
( a11+4*n-3-i );
<P></SPAN></P>
<P class=MsoPlainText
style="TEXT-ALIGN: left; tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if ( i==n && j!=1 ) return
( a11+3*n-2-j );
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>{<SPAN style="mso-spacerun: yes">
</SPAN>if (i>=(n+1)/2 && j>=(n+1)/2)<SPAN
style="mso-spacerun: yes"> </SPAN>min =
MIN(n-i+1,n-j+1);
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if (i<(n+1)/2
&& j>=(n+1)/2) min = MIN(i,n-j+1);
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else if (i>=(n+1)/2
&& j<(n+1)/2) min = MIN(n-i+1,j);
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>else<SPAN
style="mso-spacerun: yes">
</SPAN>min = MIN(i,j);
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>a22 =
fun(a11,min,min,n);
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: 宋体"><SPAN
style="mso-spacerun: yes"> </SPAN>return<SPAN
style="mso-spacerun: yes"> </SPAN>fun(a22, i-min+1, j-min+1, n-2*(min-1)
);
<P></SPAN></P>
<P class=MsoPlainText style="tab-stops: 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -