2017-06-16 5 views
0

* and -と入力した行列があります。*はウイルスを表し、-はウイルスのフリースポットです。私はすべてのウイルスの近隣隣人は別のウイルスであり、その数を確定するためにフリースポットではありません。私がチェックしなければならない隣人は、[row + 1][col],[row - 1][col],[row][col + 1]および[row][col - 1]であり、合計4つの隣人である。私は、すべてのケースをチェックしてカバーする関数を作った。たとえば、私が調べている要素が行列の隅の1つである場合など。私はifステートメントをたくさん持っている、本当に長い80行の関数を考え出しました。 のような文を書く以外に、これをすべてチェックする効率的な方法(行数を意味する)はありますか?ここで行列のセル値の近傍を調べる

https://pastebin.com/2f7YpreZは、私はあなたが何ができるか

+1

あなたは仕事をしていますが、非効率的なような機能を持っていますか?適切なサイトでcodereviewを試してください。 https://codereview.stackexchange.com – Yunnosch

+1

ここに誰かがあなたの既存のコードで一番役に立たないデザイン問題を見つけたければ、[mcve]を作ってください。 – Yunnosch

+0

'20個のif文のように書かなくても、これをすべてチェックする効率的な方法はありますか? 'うーん、'効率的なものを定義してください。パフォーマンス面では?コード行数の点では?保守性の面では?パフォーマンスを参照する場合は、コンパイラを信頼してください。要件が満たされていない場合は、コードをプロファイルし、それに応じて調整します。 – 4386427

答えて

0

を書いたコードがあれば、同じ結果になる文をマージすることです。これにより、コードが短くなり(読みやすくなります)、パフォーマンスが向上する場合もあります。

したがって、たとえば、あなたが持っている場合:

if([row - 1][col]) 
    // do A 
else if([row][col + 1]) 
    // do B 
else if([row + 1][col]) 
    // do A 

を、あなたがそのように書くことができます:

if([row - 1][col] || [row + 1][col]) 
    // do A 
else if([row][col + 1]) 
    // do B 

はこれを行うには、あなたのコードは、更なる改善が必要であると感じ、Code Reviewで投稿してください。

関連する問題