掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体で木構造を作り出すには? (ID:72208)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
追加質問です。 http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=2205 リンク先問題を解くために、当たりくじデータを後ろから読み込んであたりくじの木構造を作る処理なのですが、この木構造を安全にfreeする方法を知りたいです。 後、ローカルで簡単なテストをして、リンク先にあるサーバでジャッジしてもらったのですがランタイムエラーになってしまいました。 理由がつかめず困っております。 どなたかアドバイスお願いします。 ランタイムエラーになるコードは下記のとおりです。 #include <stdio.h> #include <vector> #include <stdlib.h> void solve(int n,int m); struct node* nodeCreat(struct node*,int,char c[9],int m); void nodeSearch(struct node*,int,char[9]); long sum; struct node{ int money; char no; std::vector<struct node* > nexts; }; int main(void) { int n,m; scanf("%d %d",&n,&m); while(n!=0 && m!=0){ if(n==0 || m==0){ printf("0\n"); }else{ solve(n,m); } scanf("%d %d",&n,&m); } return 0; } void solve(int n,int m) { sum=0; char Ni[9]; int Mi; struct node* top=(node*)malloc(sizeof(node)); for(int i=0;i<n;i++){ scanf("%s %d",Ni,&Mi); nodeCreat(top,8,Ni,Mi); } for(int i=0;i<m;i++){ scanf("%s",Ni); nodeSearch(top,8,Ni); } printf("%d\n",sum); } void nodeSearch(struct node* n,int p,char c[9]){ if(n->money>0) { sum+=n->money; }else { for(unsigned int i=0;i<n->nexts.size();i++) { if(c[p]==n->nexts[i]->no) { nodeSearch(n->nexts[i],p-1,c); break; } } } } struct node* nodeCreat(struct node* n,int p,char c[9],int m) { if(n==NULL){ n=(node*)malloc(sizeof(node)); n->no=c[p+1]; } if(c[p]=='*' || p==-1){ n->money=m; n->no=c[p+1]; }else{ n->money=0; int hit=-1; for(unsigned int i=0;i<(n->nexts.size());i++){ if(n->nexts[i]->no==c[p]){ hit=i; } } if(hit!=-1){ n->nexts[hit]=nodeCreat(n->nexts[hit],p-1,c,m); }else{ n->nexts.push_back(nodeCreat(0,p-1,c,m)); } } return n; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.