| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 843 人关注过本帖
标题:puzzle 问题解决方法 各抒己见
只看楼主 加入收藏
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
贴上自己的代码,欢饮纠错。
程序代码:
#include <stdio.h>
#include <string.h>
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};//上下左右方向 
typedef    struct state{
    int d[4];
}state;  
int num = 0;//填写个数 
state s[201];
int map[200][200];//
int vis[200][200];//标记是否访问过 
int n;
void write_data(int v,state &ss,int x,int y,int &num);
void print_r();
int main(){
    bool flag = true;
    state temp;
    int v1;
    scanf("%d",&n);
    memset(map,0,sizeof(map));
    memset(vis,false,sizeof(vis));
    for(int i=1; i <= n; i++){
        scanf("%d%d%d%d",&s[i].d[0],&s[i].d[1],&s[i].d[2],&s[i].d[3]);
        if( flag && s[i].d[0] == 0 && s[i].d[2] == 0){
            temp = s[i];
            v1 = i;
            flag = false;
        }
    }
    num = 1;
    write_data(v1,temp,0,0,num);
    print_r();
    return 0;
}
void write_data(int v,state &ss,int x,int y,int &num){//v是当前要填的数据,ss为其对应状态,x,y表示位置,num就是第几个。 
    if(num == n + 1 ){
        return;
    }else{
        if(x < 0 || y < 0 || vis[x][y])
            return;
        map[x][y] = v;
        vis[x][y] = true;
        num++;
        for(int i=0; i < 4 ;i++){
            if(ss.d[i] != 0)
                write_data(ss.d[i],s[ss.d[i]],x + dx[i],y + dy[i],num);
        }
    }
}
void print_r(){
    bool flag = false;
    for(int i = 0;i < 200 ;i++){
        for(int j = 0; j < 200; j++){
                if(map[i][j]){
                    printf("%d ",map[i][j]);
                }else{
                    break;
                }
        }
        printf("\n");
        if(!map[i+1][0])
            break;
    }
}

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2013-03-29 10:36
快速回复:puzzle 问题解决方法 各抒己见
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017353 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved