質問編集履歴

3

コアダンプ一部から抜け出すことができた。

2018/12/04 10:42

投稿

ZhenZeZhang
ZhenZeZhang

スコア33

test CHANGED
File without changes
test CHANGED
@@ -133,3 +133,149 @@
133
133
  コード
134
134
 
135
135
  ```
136
+
137
+
138
+
139
+ これを用いて編集をして
140
+
141
+ ```
142
+
143
+ #include<stdio.h>
144
+
145
+ #include<stdlib.h>
146
+
147
+
148
+
149
+ #define N 8
150
+
151
+
152
+
153
+ int p[N];
154
+
155
+
156
+
157
+ int check(int x,int y)
158
+
159
+ {
160
+
161
+ int i, j;
162
+
163
+
164
+
165
+ for(i=0; i<N; i++)
166
+
167
+ {
168
+
169
+ for(j=i+1; j<i; j++)
170
+
171
+ {
172
+
173
+ if(p[i]==p[j])
174
+
175
+ return 1;
176
+
177
+ }
178
+
179
+ }
180
+
181
+
182
+
183
+ return 0;
184
+
185
+ }
186
+
187
+
188
+
189
+ void qp(int n)
190
+
191
+ {
192
+
193
+ int i, l, m, k;
194
+
195
+
196
+
197
+ for(i=0; i<N; i++)
198
+
199
+ {
200
+
201
+ printf("ok1");
202
+
203
+ p[n]=i;
204
+
205
+ if(abs(p[n]- p[n-1]) !=1 && p[n]-p[n-1]==0)
206
+
207
+ {
208
+
209
+ printf("ok2");
210
+
211
+ if(N-1 == n)//queen place check.
212
+
213
+ {
214
+
215
+ printf("ok3 ");
216
+
217
+ if(check(p[m], p[l]) == 0)
218
+
219
+ {
220
+
221
+ for(k=0; k<N; k++)printf("%d ", p[k]);
222
+
223
+ printf("\n");
224
+
225
+ }
226
+
227
+ }
228
+
229
+ } else {
230
+
231
+ qp(n+1);
232
+
233
+ }
234
+
235
+ }
236
+
237
+ }
238
+
239
+
240
+
241
+ int main(void)
242
+
243
+ {
244
+
245
+ int i;
246
+
247
+
248
+
249
+ for(i=0; i<N; i++)p[i]=0;
250
+
251
+ for(i=0; i<N; i++)
252
+
253
+ {
254
+
255
+ printf("ok0");
256
+
257
+ p[0]=i;
258
+
259
+ qp(1);
260
+
261
+ }
262
+
263
+ }
264
+
265
+
266
+
267
+
268
+
269
+ コード
270
+
271
+ ```
272
+
273
+
274
+
275
+ 結果:$ ./a
276
+
277
+ ok0ok1ok2ok1ok1ok1ok2ok1ok1ok1ok2ok1ok1ok1ok2ok3 0 1 0 1 0 1 0 0
278
+
279
+ Segmentation fault (コアダンプ)
280
+
281
+ の進展ができました。現在コアダンプのところを解読しています。

2

p「-1」になるところをできる限り減らしました。ですが if(abs(p[n]- p[n-1]) !=1 && p[n]-p[n-1]==0)のところをどうすればよいのかがわからない。

2018/12/04 10:42

投稿

ZhenZeZhang
ZhenZeZhang

スコア33

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,8 @@
1
1
  コアダンプが起こりまして -o -g しても何も起こりませんでした。(NQueenを解く問題です。)
2
2
 
3
+ 現在はp「-1」になるところを修正しています。
3
4
 
4
-
5
+ 自分では何時間も考慮したのですか、いかにしてp「-1」を解決するのかが見つからないく、もし何か良い方法があればぜひおねがいして教えてほしいです。
5
-
6
6
 
7
7
  ```#include<stdio.h>
8
8
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  {
56
56
 
57
- int i, j= p[n], l, m, k;
57
+ int i, l, m, k;
58
58
 
59
59
 
60
60
 
@@ -66,7 +66,7 @@
66
66
 
67
67
  p[n]=i;
68
68
 
69
- if(abs(p[n]- p[n-1]) !=1 && p[n]-p[n-1]==0 && p[n]!=p[j])
69
+ if(abs(p[n]- p[n-1]) !=1 && p[n]-p[n-1]==0)
70
70
 
71
71
  {
72
72
 
@@ -120,12 +120,16 @@
120
120
 
121
121
  p[0]=i;
122
122
 
123
- qp(0);
123
+ qp(1);
124
124
 
125
125
  }
126
126
 
127
127
  }
128
128
 
129
+
130
+
131
+
132
+
129
133
  コード
130
134
 
131
135
  ```

1

提案より j= p[n-1] を j=p[n] に修正した。

2018/12/04 10:33

投稿

ZhenZeZhang
ZhenZeZhang

スコア33

test CHANGED
@@ -1 +1 @@
1
- 8-Queen 8クイーン 8Queen 8queen プログラム コアダンプ
1
+ 8-Queen 8クイーン 8Queen 8queen プログラム コアダンプ を解決したい。
test CHANGED
@@ -1,8 +1,10 @@
1
- コアダンプが起こりまして -o -g しても何も起こりませんでした。(Queenを解く問題です。)
1
+ コアダンプが起こりまして -o -g しても何も起こりませんでした。(NQueenを解く問題です。)
2
2
 
3
3
 
4
4
 
5
+
6
+
5
- #include<stdio.h>
7
+ ```#include<stdio.h>
6
8
 
7
9
  #include<stdlib.h>
8
10
 
@@ -52,7 +54,7 @@
52
54
 
53
55
  {
54
56
 
55
- int i, j= p[n-1], l, m, k;
57
+ int i, j= p[n], l, m, k;
56
58
 
57
59
 
58
60
 
@@ -123,3 +125,7 @@
123
125
  }
124
126
 
125
127
  }
128
+
129
+ コード
130
+
131
+ ```