| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2235 人关注过本帖
标题:ZOJ的2016题Segmentation Fault求解!
只看楼主 加入收藏
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
这是按题意做的,不知道能通过不。(按题意的例子已通过,要发邮件注册就免了)
程序代码:
#include <stdio.h>
#include <stdlib.h>
struct node
{
    int next;
    char *p;
};
int find(node *p,int dp,int l)
{
    int i,j;
    char a;
    for(i=0,j=0;i<l;i++)if(p[i].next >=0)j++;;
    if(j==l-1)return 1;  //如果连成串则返回
    for(i=0;p[dp].p[i];i++);
    a=p[dp].p[i-1];          //找到字符串尾部字符
    for(i=0;i<l;i++)
    {
        if(i!=dp&&p[i].next <0&&p[i].p[0]==a)
        {
            p[dp].next =i;
            if (find(p,i,l))return 1;
            else p[dp].next =-1;
        }
    }
    return 0;
}
void main()
{
    int i,j,n,t;
    char a[1000],*pp;
    node *p;
    for(t=0,scanf("%d",&t);t>0;t--)
    {
        if(scanf("%d",&n))
        {
            if(n>0)
            {
                p=(node*)malloc(sizeof(node)*(n+1));  //申请指针空间
                for(i=0;i<n;i++)
                {
                    scanf("%s",a);
                    for(j=0;a[j];j++);
                    p[i].p=(char*)malloc(j+1);  //申请字符串空间
                    for(;j>=0;j--)p[i].p[j]=a[j];  //拷贝字符串到堆中
                    p[i].next =-1;
                }
                for(i=0;i<n;i++)if(find(p,i,n))break;;
                if(i==n)
                    printf("The door cannot be opened.\n");
                else
                    printf("Ordering is possible.\n");
                for(i=0;i<n;i++)free(p[i].p);  //释放字符串堆空间
                free(p);    //释放指针空间
            }
        }
    }
}



能编个毛线衣吗?
2015-05-14 11:53
我叫K
Rank: 2
等 级:论坛游民
帖 子:74
专家分:19
注 册:2015-4-28
收藏
得分:0 
。。。求翻译。。。。。。

他们和我说,喜欢一个女生要大胆追!
2015-05-14 12:14
孤独的守候
Rank: 2
等 级:论坛游民
威 望:1
帖 子:25
专家分:32
注 册:2015-3-25
收藏
得分:0 
程序代码:
#include <iostream>
#include <string>
#include <vector>

using namespace std;

template<typename T>
bool determine(vector<T> & v)
{
    int n = v.size();

    int crossdegree[32] = {0};

    for(int i = 0; i < n; i++)
    {
        crossdegree[v[i][0] - 97] -= 1;
        crossdegree[v[i][v[i].length() - 1] - 97] += 1;
    }

    int sum = 0;
    int negativeone = 0;
    int positiveone = 0;
    int zeroNum = 0;

    for(int i = 0; i < 32; i++)
    {
        if(crossdegree[i] == 1)
        {
            positiveone += 1;
        }
        else if(crossdegree[i] == -1)
        {
            negativeone += 1;
        }

        if(crossdegree[i] == 0)
        {
            zeroNum += 1;
        }
    }

    if((positiveone == 1 && negativeone == 1 && zeroNum == 30) || (zeroNum == 32))
    {
        return true;
    }
    
    return false;
}

int main(void)
{
    vector<string> v;

    v.push_back("ibm");
    v.push_back("jki");
    v.push_back("mkj");
    v.push_back("jbi");
    v.push_back("ibj");

    if(determine(v))
    {
        cout << "ordering is possible" << endl;
    }
    else
    {
        cout << "the door cannot be opened" << endl;
    }

    system("pause");

    return 0;
}

欢迎大家与我一起探讨实时渲染技术~~
2015-05-15 23:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 23楼 孤独的守候
经验证,如果输入“aaa,bbb,ccc,ddd,eee”,还可允许一个完全不同的字母如:“aan,bbb,ccc,ddd,eee”,你的代码会显示ordering is possible,很显然,采取统计首尾字母的算法失败。不过采取向量的方式存储输入的单词可取,但我不会使用向量,感觉向量类型是一个单向增长的链表结构。

能编个毛线衣吗?
2015-05-16 00:52
快速回复:ZOJ的2016题Segmentation Fault求解!
数据加载中...
 
   



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

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