数字棋盘
在n*n的数字棋盘中,每个方格有一个数字成本C[i][j],求从最后一行开始到第一行的最短路径(所有路过的成本方格和最小),假定每次只能允许向右对角,左对角,垂直移动。
算法的递推式:Q[i][j] =
C[n][j] i=n;
+∞ j<1或j>n;
Min{Q[i+1][j-1]、Q[i+1][j]、Q[i+1][j+1]}+C[i][j] other。 其中Q[i][j]表示从最后一行开始走到[i][j]位置的最小成本 。 算法分析:矩阵链相乘的时间复杂度是O(n2),算法所需要的工作空间取决于所需要的三角数组的大小,也就是其空间复杂度是O(n2)。
算法问题:在C++环境中如何实现二维数组的形参带入函数中计算。
算法实现:
#include
#include
#include
void Printpath(int i,int j,int n) {
int k;
int po=n-1; printf(\ printf(\ if(i==po) {
k=j+p[i][j]; printf(\ }
else Printpath(i+1,j+p[i][j],n); }
void main() {
int k; int m; int n; int m1;
printf(\请输入数字棋盘的行列数:\ scanf(\
cout << \请输入数字棋盘矩阵:\\n\for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
cin >> c[i][j]; } }
for(int d=1;d<=n;d++) q[n][d]=c[n][d];
for(int i2=1;i2<=n;i2++) {
q[i2][0]=999; q[i2][n+1]=999; }
for(int i1=n-1;i1>=1;i1--) {
for(int j1=1;j1<=n;j1++) {
if(q[i1+1][j1-1] if(q[i1+1][j1-1] else { m1=q[i1+1][j1+1]; p[i1][j1]=1; } } else { if(q[i1+1][j1] q[i1][j1]=m1+c[i1][j1]; } } m=q[1][1]; k=1; for(int j=2;j<=n;j++) { if(q[1][j] m=q[1][j]; k=j; } } printf(\该数字棋盘从最上行到最下行的的路径是:\\n\ Printpath(1,k,n); cout <<\该数字棋盘的最小路径值为:\} 世人说,爱是最宝贵的东西。我皱眉,爱,我不懂。 然后,我去看言情小说,用它来弥补我最关键的一刻。可我却依旧不明白,反而更加懵懂。 我看过太多的人。他们或许是高高在上的佼佼者,有华丽的身世,由于生俱来的相貌与气质;他们或许是淹没在人群中的丑小鸭,有各种不一样的机遇,追逐自己的爱情。 我疑惑,我要以那种姿态等待我的王子。是那些嚣张泼辣的女强人,或是冷漠宁静的安定者。是视一切为无物,与固有的姿态冷眼生活。还是绽开笑容,热情迎接生命赐予我的每一分相遇。怎么样,才能吸引属于我的目光。 然后,我在一本书里看到,爱情来临之前,只用做好自己。我延续自己冷漠而孤独的风格,期待,最宝贵的爱情。 我看到过太多爱情的开始,是一见钟情,却遮遮掩掩。还是放开大胆,用尽浑身解数的追逐。明明感觉无望的心上人,却依旧不放弃。或者望而退却的钦慕着,却发现那边正是爱自己的人。 我疑惑,当我遇到爱情是应该怎么做?人们都不能知道对方的对方的想法。怯懦与大胆不过都是一面之差,无法了解,那边的人,到底在想什么。那么,我所认为的无望是不是真的无望,我所坚守的追寻值不值得追寻?我是应该大胆说出自己的爱,去读那一把,还是躲在角落里,等着对方来爱我?那么,如果两个人都小心的躲闪,是不是,真爱就这么流过?