Discuz!NT|BBS|论坛

注册

 

发新话题 回复该主题

有没有编程狂人,我的头都大了 [复制链接]

1#

有没有编程狂人,我的头都大了

老师要我们做个课题,可是我思路的几块就是连不起来

谁能帮帮我啊

只要有人留下联系方法,

我一定联系
分享 转发
TOP
2#
www.nowdigi.net
里面的newbie world
好多菜鸟和好多高手在
TOP
3#
说出来听听?大伙才能帮你参考参考啊
TOP
4#
是啊,这里好象也有不少编程高手。
TOP
5#
什么课题。用什么做。C。VB。VFP。?
TOP
6#
在一个由M*N个小正方形组成的矩形上,依次用两个相等的小正方形大小的矩形(此处所谓相邻是指两个正方形有一条公共边)不重复的覆盖该矩形区域。请构造出该问题的模型,设计算法求解所有可能的覆盖。PASCAL C语言都可,或者写出算法类PASCAL语言。


我的思路是用深度遍力,用回溯,求通过所有点的简单路径
控制图形,可是具体代码的时候,我有很大困难,有高手花点时间帮我搞定吗?
TOP
7#
UP

谁能帮帮我
TOP
8#
const m=50
const n=50
int step[4][2]=
{
    -1,0,
    1,0,
    0,-1,
    0,1
}

int matrix[m][n]={0,};
int remain = 0;

void travelpanel(int xextra,int yextra,int curX,int curY)
{
    curX += xextra;
    curY += yextra;
    int i;
    if ( (curX <= n && curX >= 0 ) && (curY <= m && curY>=0)
        && matrix[curY][curX] == 0)
    {
        matrix[curY][curX] = remain;
        remain --;
        if(!remain)    //所有的方块都覆盖完了
        {
            //找到了一个好的通道,按矩阵里面数据值m*n,m*n-1,...,1,
            //从大到小顺序所在的x,y打印出来,就是一条覆盖路径
        }
        else
        {
            for( i = 0 ; i < 4; i++)
                travelpanel(step[i][0],step[i][1],curX,curY);
        }
        matrix[curY][curX] = 0;
        remain ++;
    }
}

void travel(void)
{
    int i;
    matrix[0][0] = remain;
    remain -- ;
    for( i = 0 ; i < 4; i++)
        travelpanel(step[i][0],step[i][1],0,0);
    
}
    
void main(void)
{
    remain = m*n;    
    travel();
}




随手写了一个,因为要所有可能的路径,所以路径打印部分烦了一点,没有写代码,如果只打印一条的话,会方便很多
程序是现写的没有编译过,可能会有语法错误,打印路径部分没有写
TOP
9#
排版怎么变成这样了?吃/tab啊
TOP
10#
#define MAX 50
int sd[MAX][MAX];
struct stacka{int x;
int y;
int direct;};
typedef struct stacka STACKA;
typedef struct move{int x;int y;} MOVE;
MOVE mv[5];
STACKA stack[MAX*MAX];
void setmove()
{mv[1].x=0;mv[1].y=-1;
mv[2].x=1;mv[2].y=0;
mv[3].x=0;mv[3].y=1;
mv[4].x=-1;mv[4].y=0;}
void travel(m,n)
int m;
int n;
{int a,i,j,x,y;
i=1;
x=y=j=0;

while(x>=0&&y>=0)
{if(x==0&&y==0&i==5) break;
do{if((x+mv[i].x=0)&&(y+mv[i].y>=0)&&
    (sd[x+mv[i].x][y+mv[i].y]==0))
{stack[j].x=x;
stack[j].y=y;
stack[j].direct=i;
j++;
sd[x][y]=1;
x=x+mv[i].x;
y=y+mv[i].y;
i=1;
break;}
i++;}
while(i<5);
if(i>=5)
{sd[x][y]=0;
x=stack[--j].x;
y=stack[j].y;
i=stack[j].direct+1;
}
if(j==m*n-1)
{stack[j].x=x;
stack[j].y=y;
for(a=0;a<=j;a++)
printf("x=%d,y=%d**stack[a].x,stack[a].y);
printf("\n");
sd[x][y]=0;x=stack[--j].x;
y=stack[j].y;
i=stack[j].direct+1;
}
}}

void main()
{int m,n;
scanf("%d,%d**&m,&n);
setmove();
travel(m,n);
}
TOP
发新话题 回复该主题